使用mongoose为所有文档获取数组中对象的不同值

时间:2016-06-05 15:42:29

标签: node.js mongoose aggregate distinct

我在nodejs中使用Mongoose。所以这是一个示例Publisher模型:

name: String,
books: [{
    title: String,
    author: {
        name: String,
        age: Number
    }
}]

我想获得与正则表达式匹配的所有不同作者姓名。我是noSql的新手,所以也许我只是在做一些愚蠢的事情。我想我想做点什么:

Publisher.aggregate([
    {$unwind: '$books'},
    {$match: {
        'books.author.name': new RegExp(req.params.regex)
    }},
    {$group: {
        _id: '$books.author.name'
    }},
    {$group: {
        distinctValues: {$addToSet: '$_id'}
    }}
], function(err, result) {
    if(err) throw err;
    res.json(result);
})

这看起来应该符合:https://dba.stackexchange.com/questions/59661/mongodb-distinct-in-an-array

我们非常感谢您提供的任何和所有输入。

1 个答案:

答案 0 :(得分:1)

您没有提供执行此查询时遇到的错误,但似乎您得到类似的内容:'组规范必须包含_id'。 您的查询存在问题:

{$group: {
    distinctValues: {$addToSet: '$_id'}
}}

$group运算符必须包含_id字段

到目前为止,$ group运算符已经提供了不同的组,这个最后的管道似乎是多余的,接下来对我有用:

Publisher.aggregate([
    {$unwind: '$books'},
    {$match: {
        'books.author.name': new RegExp(req.params.regex)
    }},
    {$group: {
        _id: '$books.author.name'
    }}
], function(err, result) {
    if(err) throw err;
    res.json(result);
})