Arrays 嵌入式mongodb文档的查询数组

Arrays 嵌入式mongodb文档的查询数组,arrays,mongodb,mongodb-query,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是域名所有者,范围是clearcrimson 文档: {

我正在尝试查询mongodb文档,但运气不好。 以下查询用于获取id为domainOwner且作用域为clearcrimson的用户

db.getCollection("users").findOne( { "roles": { $elemMatch: {_id: "domainOwner", scope: "clearcrimson" } } }, {_id:1})
如何修改查询以获得一个电子邮件id可能为的用户a@b.com,id是域名所有者,范围是clearcrimson

文档:

{ 
    "_id" : "7Rc5q2o3Qnv7j2HuT", 
    "emails" : [
        {"address" : "a@b.com"},
        {"address" : "c@d.com"},
    ], 
    "roles" : [
        {"_id" : "domainOwner", "scope" : "clearcrimson"}, 
        {"_id" : "domainOwner", "scope" : "clearcrimson2"}
    ]
}
当您使用
$elemMatch
来匹配数组中单个对象中的多个条件时,您可以使用简单的
arrayName.fieldName
来匹配单个条件,就像我在上面的查询中对“emails.address”所做的那样

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

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

我看不出有什么新问题。总的来说,您只需要在数组中匹配双条件的文档。唯一的区别是文档字段仅此而已。
db.getCollection("users").findOne({ "roles": {$elemMatch: { "_id": "domainOwner", "scope": "clearcrimson"}}, "emails.address": "a@b.com" })
db.getCollection("users").findOne({ "roles": {$elemMatch: { "_id": "domainOwner", "scope": "clearcrimson"}}, "emails.address": "a@b.com" }, {_id: 1, "roles.$": 1, emails: 1})