簡體   English   中英

MongoDB C#驅動程序 - 如何查詢子文檔數組的屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM