Query/Find 到 Return JSON BsonDocument 中的对象
Query/Find to Return JSON Object in a 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();
但是,这returns整个文档。有没有办法只获取 JSON 对象 ({"tag" : "Dept", "name" : "TestDept1"}
)?
我想要获取的只是 "value" 属性(在本例中,它是 "yyy"),而不是整个文档。
更新:
正如 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();
为此您需要使用 ElemMatch 投影。
Shell 查询:db.testing.find({Content:{$elemMatch:{"tag":"Dept"}}},{"_id":0, "Content.$":1})
C# 查询将是
Find(x => x.Content.Any(p => p.tag == "Dept")).Project(Builders<BsonDocument>.Projection.Exclude("_id").Include("Content.$")).ToList();
请检查这是否有效。
我有这样一个文档:
{ "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();
但是,这returns整个文档。有没有办法只获取 JSON 对象 ({"tag" : "Dept", "name" : "TestDept1"}
)?
我想要获取的只是 "value" 属性(在本例中,它是 "yyy"),而不是整个文档。
更新:
正如 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();
为此您需要使用 ElemMatch 投影。
Shell 查询:db.testing.find({Content:{$elemMatch:{"tag":"Dept"}}},{"_id":0, "Content.$":1})
C# 查询将是
Find(x => x.Content.Any(p => p.tag == "Dept")).Project(Builders<BsonDocument>.Projection.Exclude("_id").Include("Content.$")).ToList();
请检查这是否有效。