У меня есть документ, как это:Query/Найти Вернуться JSON объект в BsonDocument
{ "File" : "xxxxxxx.txt",
"Content" : [
{ "tag" : "Book",
"name" : "TestBook1",
"value" : "xxx"
},
{ "tag" : "Dept",
"name" : "TestDept1",
"value" : "yyy"
},
{ "tag" : "Employee",
"name" : "TestEmployee1",
"value" : "zzz"
}]
}
я могу найти документ с помощью:
var filter = Builders<BsonDocument>.Filter.Eq("Content.tag", "Dept");
var result = collection.Find(filter).ToList();
Однако, это возвращает весь документ. Есть ли способ получить объект JSON ({"tag" : "Dept", "name" : "TestDept1"}
)?
То, что я пытаюсь получить, это просто свойство «значение» (в данном случае это «yyy»), а не весь документ.
UPDATE:
Как Фани предложил, я был в состоянии сделать эту работу со следующим кодом:
var subFilter = Builders<BsonDocument>.Filter.Eq("tag", "Dept");
var filter = Builders<BsonDocument>.Filter.ElemMatch("Content", subFilter);
var result =
collection.Find(filter)
.Project(Builders<BsonDocument>.Projection.Exclude("_id").Include("Content.$"))
.ToList();
Phani, спасибо за ответ. К сожалению, у меня не может быть класса POCO для моего JSON, потому что структура объекта в Контенте динамична. Я использую структуру fix только для простоты. Есть ли способ не использовать класс POCO в LINQ, чтобы сделать эту работу? – notlkk
Phani, я смог использовать .Project, как вы предложили в сочетании с фильтром, чтобы включать только объект Content. Однако это возвращает весь объект Content. Есть ли способ дальнейшего фильтрации результата, поэтому он содержит только часть Dept в Контенте? – notlkk
Phani, еще раз спасибо за ваш ответ. Кажется, я понял. Я обновлю свой пост и приму свой ответ. – notlkk