Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb使用category获取不同的值_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

mongodb使用category获取不同的值

mongodb使用category获取不同的值,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,假设有以下集合 人民: { _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: 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名称来获得distict工作:

正在尝试获得以下结果:

[
    {
        value: 'lifeguard',
        names: [
            'john',
            'alex'
        ],
    },
    {
        value: 'gardener',
        names: [
            'alex'
        ],
    },
]
我知道如何找到独特的工作

db.people.find().distinct('jobs')

但是,我没有弄清楚如何使用多个属性执行不同的查询

最好使用聚合框架,其中有一个管道,该管道具有一个阶段,可以按作业键对文档进行分组,然后通过累加器在组内构建名称不同的数组

考虑以下聚合操作:

db.people.aggregate([
    {
        "$group": {
            "_id": "$job",
            "names": { "$addToSet": "$name" }
        }
    }
])

@chridam确实帮助我找到了正确的答案,在现实世界中,我的物体更像

{
    _id: 1,
    name: ['john', 'bah1', 'blah2', 'blah3'],
    last_name: 'blah1',
    job: 'lifeguard'
}
因此,我必须像@chridam的回答一样,对名称和$group进行聚合

model.aggregate([
    {$unwind: "$name"},
    {
        $group: {
            _id:"$name",
            jobs: {
                $addToSet: "$job"
            }
        }
    }
]

谢谢,您帮助e终于了解了聚合函数的工作原理。您好,您知道这个问题的答案吗?