C# 查询/查找以返回BsonDocument中的JSON对象
我有这样一份文件:C# 查询/查找以返回BsonDocument中的JSON对象,c#,mongodb,mongodb-query,bson,C#,Mongodb,Mongodb Query,Bson,我有这样一份文件: { "File" : "xxxxxxx.txt", "Content" : [ { "tag" : "Book", "name" : "TestBook1", "value" : "xxx" }, { "tag" : "Dept", "name" : "TestDept1", "
{ "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();
为此,需要使用ElemMatch投影 此的Shell查询:db.testing.find({Content:{$elemMatch:{“tag”:“Dept”}}},{“\u id”:0,“Content.$”:1}) C#查询将是
查找(x=>x.Content.Any(p=>p.tag==“Dept”)).Project(Builders.Projection.Exclude(“\u id”).Include(“Content.$”).ToList();
请检查此操作是否正常。您需要使用ElemMatch投影进行此操作 此的Shell查询:db.testing.find({Content:{$elemMatch:{“tag”:“Dept”}}},{“\u id”:0,“Content.$”:1}) C#查询将是
查找(x=>x.Content.Any(p=>p.tag==“Dept”)).Project(Builders.Projection.Exclude(“\u id”).Include(“Content.$”).ToList();
请检查这是否有效。Phani,谢谢您的回复。不幸的是,我的JSON不能使用POCO类,因为内容中的对象结构是动态的。我使用固定结构只是为了简单。有没有办法不在LINQ中使用POCO类来实现这一点?Phani,我可以按照您的建议使用.Project结合过滤器来只包含内容对象。但是,这将返回整个内容对象。是否有办法进一步过滤结果,使其仅包含内容中的部门部分?Phani,再次感谢您的回复。我想我明白了。我会更新我的帖子并接受你的回答。帕尼,如果我还需要过滤文件字段,我将如何查找?我需要这样做的查询:如果File=“xxxxxxx.txt”和Content.tag=“Dept”是,你可以这样做。Shell代码类似于` db.testing.find({File:'xxxxxxx.txt',内容:{$elemMatch:{“tag”:“Dept”}}},{u id:0,“Content.$”:1})Phani,感谢您的回复。不幸的是,我的JSON不能使用POCO类,因为内容中的对象结构是动态的。我使用固定结构只是为了简单。有没有办法不在LINQ中使用POCO类来实现这一点?Phani,我可以按照您的建议使用.Project结合过滤器来只包含内容对象。但是,这将返回整个内容对象。是否有办法进一步过滤结果,使其仅包含内容中的部门部分?Phani,再次感谢您的回复。我想我明白了。我会更新我的帖子并接受你的回答。帕尼,如果我还需要过滤文件字段,我将如何查找?我需要这样做的查询:如果File=“xxxxxxx.txt”和Content.tag=“Dept”是,你可以这样做。Shell代码类似于`db.testing.find({文件:“xxxxxxx.txt”,内容:{$elemMatch:{“tag”:“Dept”}}}},{“\u id”:0,“Content.$”:1})
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();