【问题标题】:select data by email in mongodb在 mongodb 中通过电子邮件选择数据
【发布时间】:2017-09-26 01:48:36
【问题描述】:

如何从用户集合中按 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
}

【问题讨论】:

    标签: mongodb robo3t


    【解决方案1】:

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


    会给你所有的地址

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

    回应

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

    只会为您提供数组中的第一个电子邮件地址。您已明确删除所有其他字段

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

    回应

    {
        "emails" : [ 
            {
                "address" : "x@gmail.com"
            }
        ]
    }
    

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

    db.users.aggregate({$match: {_id:'QYoHQkTuTXnEC6Pws'}}, 
       {$project: {_id:0,email: {$arrayElemAt: ['$emails.address',0]}}})
    

    响应 {"email" : "x@gmail.com"}

    【讨论】:

      【解决方案2】:

      我得到了你的要求的答案;

      db.inventory.aggregate([{
        $match: {
          _id: "QYoHQkTuTXnEC6Pws"
        }
      }, {
        $unwind: "$emails"
      }, {
        $replaceRoot: {
          newRoot: "$emails"
        }
      }, {
        $project: {
          address: 1
        }
      }])
      

      这将首先匹配正确的文档,然后$unwindsemails 字段以暴露其中的对象,然后将根移动到它以使焦点靠近address 字段,然后$project 仅获得@987654326 @,结果是您的示例数据(如果它包含多封电子邮件);

      { "address": "x@gmail.com" }
      { "address": "xy@gmail.com" }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-07
        • 1970-01-01
        • 2022-08-20
        • 2014-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多