假设我有一个嵌套文档:
{
"_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,
}
}
答案 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"