如何获取一个文档而不是多个具有相同名称的文档

时间:2018-09-19 18:23:41

标签: node.js mongodb api mongoose mongodb-query

我正在使用nodejs mongodb RESTful API。我有10个对象文档(电工可以完成的工作)具有相同的类别名称(电工)。我需要一次只在一个对象中获得该类别名称,但是当我查询时那么所有10个文档都只显示类别名称。我该如何只获取一个对象,而不是10个具有相同类别名称的对象。

类似下面给出的10个对象具有相同的类别名称。

{ "category": [ { "_id": "5b80393f7fca491488980fe1", "category_name": "electrical", "sub_category_name": "switches meters and fuses", "price": 300 }] }

但是当我查询时我得到

{"category": [ { "_id": "5b80393f7fca491488980fe1", "category_name": "electrical" },{ "_id": "5b80393f7fca491488980fe1", "category_name": "electrical" }] }

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的预期输出,则可以使用aggregate代替您的 find 做您想要的事情。

$match接受查询[1]:

{ $match: { "category.category_name": 'electrical' }},

$unwind将使 category 数组[2]变平:

{ $unwind: '$category' }

$group允许我们按 category_name 分组,并从每个组[3中的单个文档中组成一个数组:

{ 
    $group: { 
        _id: { category_name: '$category.category_name' },
       category: {
            $push: {
                _id: '$category._id',
                sub_category_name: '$category.sub_category_name',
                price: '$category.price'
            }
       }
    }
}

$project _id [4中获取类别名称

{ 
    $project: {
        _id: 0,
        category_name: '$_id.category_name',
        category: '$category'
    }
}