我在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
我们非常感谢您提供的任何和所有输入。
答案 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);
})