在mongodb中通过电子邮件选择数据

在mongodb中通过电子邮件选择数据,mongodb,robo3t,Mongodb,Robo3t,如何从用户集合中按Id选择电子邮件,如下所示: select emailAddress from users where _id="***" 我在mongo中这样选择它,但结果不是真的 db.getCollection('users').find({_id: "QYoHQkTuTXnEC6Pws"},{ "emails.0.address": 1}) 更新:示例文件 { "_id": "QYoHQkTuTXnEC6Pws", "createdAt": ISODate("2017-03

如何从用户集合中按Id选择电子邮件,如下所示:

select emailAddress from users where _id="***"
我在mongo中这样选择它,但结果不是真的

db.getCollection('users').find({_id: "QYoHQkTuTXnEC6Pws"},{ "emails.0.address": 1})
更新:示例文件

{
  "_id": "QYoHQkTuTXnEC6Pws",
  "createdAt": ISODate("2017-03-09T06:21:29.664Z"),

  "emails": [{
    "address": "x@gmail.com",
    "verified": true
  }],
  "isDeleted": false
}

查看您的查询,您希望只找到第一封电子邮件和给定ID的地址字段。根据预期的输出,您可以尝试以下查询并选择


我会给你所有的地址

db.users.find({_id:'QYoHQkTuTXnEC6Pws'}, { "emails.address": 1})
回应

{
    "_id" : "QYoHQkTuTXnEC6Pws",
    "emails" : [ 
        {
            "address" : "x@gmail.com"
        }, 
        {
            "address" : "x2@gmail.com"
        }
    ]
}
{
    "emails" : [ 
        {
            "address" : "x@gmail.com"
        }
    ]
}

将只提供阵列中的第一个电子邮件地址。您已显式删除所有其他字段

db.users.find({_id:'QYoHQkTuTXnEC6Pws'}, 
   { 'emails.verified':0,  _id:0, createdAt: 0, isDeleted: 0, "emails": {$slice: 1}})
回应

{
    "_id" : "QYoHQkTuTXnEC6Pws",
    "emails" : [ 
        {
            "address" : "x@gmail.com"
        }, 
        {
            "address" : "x2@gmail.com"
        }
    ]
}
{
    "emails" : [ 
        {
            "address" : "x@gmail.com"
        }
    ]
}

或者,您可以使用聚合来获得预期的结果

db.users.aggregate({$match: {_id:'QYoHQkTuTXnEC6Pws'}}, 
   {$project: {_id:0,email: {$arrayElemAt: ['$emails.address',0]}}})
回应
{“电子邮件”:x@gmail.com“}

我得到了你要求的答案

db.inventory.aggregate([{
  $match: {
    _id: "QYoHQkTuTXnEC6Pws"
  }
}, {
  $unwind: "$emails"
}, {
  $replaceRoot: {
    newRoot: "$emails"
  }
}, {
  $project: {
    address: 1
  }
}])
这将首先匹配正确的文档,然后将
$展开
电子邮件
字段以暴露内部对象,然后将根移动到它以使焦点靠近
地址
字段,然后
$项目
仅获取
地址
,这将与示例数据一起产生(如果它包含多封电子邮件)