查询/查找以返回BsonDocument中的JSON对象

时间:2016-07-06 19:47:34

标签: c# mongodb mongodb-query bson

我有这样的文件:

    { "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();

1 个答案:

答案 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();

请检查这是否有效。