[英]MongoDB C# driver - how to query a property on an array of subdocuments
假設我在MongoDB中有以下文檔結構。
{
_id: ####,
Ancestors: [
{ _id: 1, Name: "asdf" },
{ _id: 2, Name: "jkl;" },
...
]
}
我想找到包含Ancestor的每個文件,其中祖先的_id是2。
我可以使用以下db.projects.find({"Ancestors._id": 2})
在mongo shell中運行此查詢: db.projects.find({"Ancestors._id": 2})
我也可以使用官方C#驅動程序運行此查詢: Query.EQ("Ancestors._id", new BsonInt32(rootProjectId))
。
這是我的POCO; 我正在使用的實際類具有比這更多的屬性,但我不想用不必要的細節來混淆問題:
public class Project
{
public int Id { get; set; }
public List<ProjectRef> Ancestors { get; set; }
}
public class ProjectRef
{
public int Id { get; set; }
public string Name { get; set; }
}
我的問題是:如何使用C#驅動程序編寫強類型查詢,以便我不必將“Ancestors._id”作為字符串傳入? 我希望能夠執行類似Query<Project>.EQ(p => p.Id, rootProjectId)
以便我可以使用成員表達式,讓類映射告訴驅動程序它應該使用“Ancestors._id” ”。
在這種情況下, ElemMatch是你的朋友。
嘗試以下方法:
var ancestorsQuery = Query<ProjectRef>.EQ(pr => pr.Id, rootProjectId);
var finalQuery = Query<Project>.ElemMatch(p => p.Ancestors, builder => ancestorsQuery));
在Projects集合的Find命令中使用finalQuery。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.