我有这样的文件:
{ "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"}
)?
我想要得到的只是&#34;价值&#34;财产(在这种情况下,它&#34; yyy&#34;),而不是整个文件。
更新
像Phani建议的那样,我能够使用以下代码完成这项工作:
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();
答案 0 :(得分:2)
您需要使用ElemMatch投影。
Shell查询:db.testing.find({Content:{$ elemMatch:{&#34; tag&#34;:&#34; Dept&#34;}}},{&#34; _id&# 34;:0,&#34;内容$&#34;:1})
C#查询将是
Find(x => x.Content.Any(p => p.tag == "Dept")).Project(Builders<BsonDocument>.Projection.Exclude("_id").Include("Content.$")).ToList();
请检查这是否有效。