我试图在我的子文档查询中返回一个级别的字段。我的架构是:
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}})
不返回父级中的字段。
你如何提高水平以获得这些领域?
答案 0 :(得分: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"}
}
}
])