如何在MongoDB中编写一个查询,它为我提供包含所有指定嵌套文档的所有文档?

时间:2015-06-12 07:05:46

标签: mongodb mongodb-.net-driver

enter image description here

假设我有一个MongoDB文档,其中包含存储在数组“AD”中的2个嵌入文档。这些嵌入式文档中的每一个都将具有我需要匹配的特定数据。如何编写查询来查找此文档?

在C#驱动程序中,我目前正在编写它:

var q1 = Query.And(
    Query.EQ("AD.ABC1", "123"),
    Query.EQ("AD.YOB", "1969")
);

var q2 = Query.And(
    Query.EQ("AD.ABC1", "456"),
    Query.EQ("AD.YON", "1970")
);

var query = Query.And(q1, q2);

这给了我一个查询:

{
    "$and": [
        {
            "AD.ABC1": "123"
        },
        {
            "AD.YOB": "1969"
        },
        {
            "AD.ABC1": "456"
        },
        {
            "AD.YON": "1970"
        }
    ]
}

这将返回具有与EITHER q1或q2匹配的嵌入文档的文档。我想要这个的交集 - 即具有与两个q1和q2匹配的嵌入文档的文档。

由于

1 个答案:

答案 0 :(得分:0)

完成了工作

var q1 = Query.ElemMatch("AD",
    Query.And(
        Query.EQ("ABC1", "123"),
        Query.EQ("YOB", "1969")
    )
);

var q2 = Query.ElemMatch("AD",
    Query.And(
        Query.EQ("ABC1", "456"),
        Query.EQ("YOB", "1970")
    )
);

var query = Query.And(q1, q2);

给了我

{
"$and": [
    {
        "AD": {
            "$elemMatch": {
                "ABC1": "123",
                "YOB": "1969"
            }
        }
    },
    {
        "AD": {
            "$elemMatch": {
                "ABC1": "456",
                "YOB": "1970"
            }
        }
    }
]
}