嵌入式mongodb文档的查询数组

时间:2019-11-11 03:28:06

标签: arrays mongodb mongodb-query

我正在尝试查询mongodb文档而没有运气。 以下查询用于获取ID为domainOwner并且范围为clearcrimson的用户。

db.getCollection("users").findOne( { "roles": { $elemMatch: {_id: "domainOwner", scope: "clearcrimson" } } }, {_id:1})

如何修改查询以使其用户的一个电子邮件ID为a @ b.com,ID为domainOwner,范围为clearcrimson?

文档:

{ 
    "_id" : "7Rc5q2o3Qnv7j2HuT", 
    "emails" : [
        {"address" : "a@b.com"},
        {"address" : "c@d.com"},
    ], 
    "roles" : [
        {"_id" : "domainOwner", "scope" : "clearcrimson"}, 
        {"_id" : "domainOwner", "scope" : "clearcrimson2"}
    ]
}

1 个答案:

答案 0 :(得分:1)

db.getCollection("users").findOne({ "roles": {$elemMatch: { "_id": "domainOwner", "scope": "clearcrimson"}}, "emails.address": "a@b.com" })

当您使用$elemMatch匹配数组的单个对象中的多个条件时,可以像我一样使用简单的 arrayName.fieldName 来匹配单个条件与上面的查询中的“ emails.address”

您可以使用 $ 位置运算符从阵列中仅投影匹配的对象)

db.getCollection("users").findOne({ "roles": {$elemMatch: { "_id": "domainOwner", "scope": "clearcrimson"}}, "emails.address": "a@b.com" }, {_id: 1, "roles.$": 1, emails: 1})

我们不能在一个投影阶段使用两个位置运算符。 我正在使用mongo 3.4版。