如何在mongodb中选择嵌套文档?

时间:2015-05-18 09:49:22

标签: c# mongodb mongodb-.net-driver

假设我有一个嵌套文档:

{
    "_id": "a125",
    "Language": null,
    "Name": "Some name",
    "Related": [{
        "_id": "b125",
        "Status": 0,
    }, {
        "_id": "b126",
        "Status": 1,
    }]
}

是否可以使用c#驱动程序选择“相关”模型,其中id为b126并同时获取父文档ID(a125)?

我想象结果应该是这样的:

{
  "_id": "a125",
  "Related": {
     "_id": "b126",
     "Status": 1,
  }
}

2 个答案:

答案 0 :(得分:4)

您可以在positional $投影运算符中使用点表示法来查找匹配的文档,并且只包含匹配的Related元素。

在shell中:

db.test.findOne({'Related._id': 'b125'}, {'Related.$': 1})

要在C#中执行此操作:

var filter = Builders<BsonDocument>.Filter.Eq("Related._id", "b125");
var projection = Builders<BsonDocument>.Projection.Include("Related.$");
var result = await collection.Find(filter).Project(projection).FirstAsync();

答案 1 :(得分:1)

您应该使用dot notation来达到目的。您的查询将如下所示:

{"Related._id": "b126"}

这将为您提供所有文档,包括您的父_id在内的所有字段,其中Related数组中有一个文档元素,其中包含值_id的字段"b126"