【问题标题】:Return only matching subdocument from array of subdocuments从子文档数组中仅返回匹配的子文档
【发布时间】:2019-01-16 00:28:52
【问题描述】:

我正在尝试仅返回具有匹配电子邮件的子文档。我相信我已经完成了文档中所说的here。这是我正在尝试的:

function lookupReferral(email) {
    return getConnection().then(db => db.collection('Referrals').findOne(
        {
            emails: {$elemMatch: {name: email}}
        },
        {
            "emails.$": 1 
        }
    ));
}

这是一个文档示例(为简洁起见,我删除了 emails 数组):

{
"_id": {
    "$oid": "5b65979d84b8942e04f4e346"
},
"accountCode": "auth0|5b4de18d8bed60110409ded5",
"accountEmail": "abc@gmail.com",
"emails": [
    {
        "name": "a@ddd.dpp",
        "signedUp": false,
        "updated": {
            "$date": "2018-08-04T12:10:05.752Z"
        }
    },
    {
        "name": "a@ddd.dpp",
        "signedUp": false,
        "updated": {
            "$date": "2018-08-04T12:10:05.752Z"
        }
    }
],
"created": {
    "$date": "2018-08-04T12:10:05.985Z"
},
"updated": {
    "$date": "2018-08-04T12:10:05.985Z"
}

由于某种原因,它返回 null(这意味着我猜它不存在?),但如果我删除了我特别想要的内容,那么我会返回整个文档。

【问题讨论】:

  • db.collection('Referrals').findOne( { emails: { $elemMatch: { name: "abc@gmail.com" }}}, { emails: { $elemMatch: { name: "abc@gmail.com" }}} )试试他的
  • 不,不起作用。当我使用子文档中存在的电子邮件时仍然返回 null { emails: {$elemMatch: {name: "azzz@zzz.dk"}}}, { emails {$elemMatch: {name: "azzz@zzz. dk"}}}

标签: mongodb mongodb-query


【解决方案1】:

你可以试试这个

db.collection.find({
  emails: {
    $elemMatch: {
      name: "a@ddd.dpp"
    }
  }
},
{
  emails: {
    $elemMatch: {
      name: "a@ddd.dpp"
    }
  }
})

example

【讨论】:

  • 我试过了,不行。看来我的问题出在查询以外的地方,然后...
  • 我的确切想法。好工具。 :)
猜你喜欢
  • 1970-01-01
  • 2015-10-31
  • 2016-07-13
  • 2019-07-09
  • 1970-01-01
  • 2018-05-27
  • 2019-04-23
  • 2013-06-16
  • 2016-08-10
相关资源
最近更新 更多