假设有以下集合
人:
{
_id: 1,
name: 'john',
last_name: 'blah1',
job: 'lifeguard'
}
{
_id: 2,
name: 'john',
last_name: 'blah2',
job: 'lifeguard'
}
{
_id: 3,
name: 'alex',
last_name: 'blah3',
job: 'lifeguard'
}
{
_id: 4,
name: 'alex',
last_name: 'blah4',
job: 'lifeguard'
}
{
_id: 5,
name: 'alex',
last_name: 'blah5',
job: 'gardener'
}
我需要使用一系列令人分心的名字来获取distict作业:
尝试获得以下结果:
[
{
value: 'lifeguard',
names: [
'john',
'alex'
],
},
{
value: 'gardener',
names: [
'alex'
],
},
]
我了解如何获得独特的工作
db.people.find().distinct('jobs')
但是,我没有弄清楚如何使用多个属性进行不同的查询。
答案 0 :(得分:3)
最好使用聚合框架,其中有一个具有 $group
阶段的管道,通过作业键对文档进行分组,然后在组中构建名称distinct数组。累加器 $addToSet
。
考虑以下聚合操作:
db.people.aggregate([
{
"$group": {
"_id": "$job",
"names": { "$addToSet": "$name" }
}
}
])
答案 1 :(得分:0)
@chridam确实帮我找到了正确的答案,在现实世界中我的对象更像是
{
_id: 1,
name: ['john', 'bah1', 'blah2', 'blah3'],
last_name: 'blah1',
job: 'lifeguard'
}
所以我必须$unwind这些名字和汇总$ group就像@ chridam的答案一样。
model.aggregate([
{$unwind: "$name"},
{
$group: {
_id:"$name",
jobs: {
$addToSet: "$job"
}
}
}
]