【问题标题】:Return fields one level up from subdocument query mongodb从子文档查询 mongodb 返回上一级字段
【发布时间】:2017-09-16 06:34:10
【问题描述】:

我试图在我的子文档查询中返回一个上一级的字段。我的架构是:

profile:{  
    contacts:[{
        first_name:'Tom',
        last_name:'Smith',
        shared:[{
              owner_id:'something',
              other_data:'something'
        }]
    },
    {
        //.... more contacts
    }]
}

如果我通过匹配“共享”子文档中的内容来编写查询以获取特定联系人,则我可以访问子文档中的字段。

我的问题是我想根据共享子文档中的 owner_id 搜索联系人,但我想返回上一级的“first_name”和“last_name”。

要查询子文档,我会执行以下操作:

db.profile.find({'contacts.shared':{ower_id:'something},{'first_name':1, 'last_name':1}})

不返回父级中的字段。

你如何提升一个级别来获得这些领域?

【问题讨论】:

  • “个人资料”是您文档中的字段名称吗?
  • 个人资料就是文件
  • 如果“个人资料”不是一个字段的名称,那么您应该将其从您的帖子中删除,同时考虑向我们展示预期的结果。
  • 当它是文档名称时,为什么我要从帖子中删除它?我的原始帖子中描述了所需的结果。我想返回 ownder_id 匹配的联系人的名字和姓氏。
  • 正如您在给您的答案中看到的那样,“个人资料”具有误导性。话虽如此,您对预期输出的描述尚不清楚。如果您真的需要答案,那么您应该考虑更新您的问题。

标签: mongodb mongoose mongodb-query


【解决方案1】:

试试这个

db.people.aggregate([
{$unwind:'$profile.contacts'},
{$unwind:'$profile.contacts.shared'},
{$match:{
    'profile.contacts.shared.owner_id':"1"}
},{
    $group:{
        _id:null,
        fname:{$first:"$profile.contacts.first_name"},
        lname:{$first:"$profile.contacts.last_name"}
    }
}
  ])

【讨论】:

  • 嗨 Vignesh,感谢您让我启用这些修饰符,但您的代码 sn-p 不起作用。它实际上是 db.profile。
猜你喜欢
  • 2018-12-14
  • 2018-12-01
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2014-01-06
  • 2019-08-18
相关资源
最近更新 更多