我是nodejs
的新用户,我正试图在mongoDB
的集合中获取所有重复的文档,因为我在mongo shell中尝试了以下查询
db.collection.aggregate([
{
$group: {
_id: {
ProductName: "$ProductName"
},
uniqueIds: {
$addToSet: "$_id"
},
count: {
$sum: 1
}
}
},
{
$match: {
count: {
$gte: 2
}
}
},
{
$sort: {
count: -1
}
}
])
{
"_id" : {
"ProductName" : "Sony Mobile"
},
"uniqueIds" : [
ObjectId("5728ce42a069270e00e59910"),
ObjectId("5728cde6a069270e00e5990e")
],
"count" : 2
},
{
"_id" : {
"ProductName" : "Nokia Mobile"
},
"uniqueIds" : [
ObjectId("5728ce42a069270e00e59920"),
ObjectId("5728cde6a069270e00e5990f")
],
"count" : 2
}
在mongo shell中,它正确地提供了我想要的结果,但我在nodejs服务器端函数中尝试了相同的查询,如下所示
Company.aggregate([
{
$group: {
_id: {
Proname: "$Proname"
},
uniqueIds: {
$addToSet: "$_id"
},
count: {
$sum: 1
}
}
},
{
$match: {
count: {
$gte: 2
}
}
},
{
$sort: {
count: -1
}
}
]).then(function (dupProds) {
console.log("ALL DUPLICATE PRDCTS : " + JSON.stringify(dupProds));
})
};
它向我显示了一个错误Compnay.aggregate(...)。然后它不是一个函数,我尝试了不同的方式但没有用,现在怎样才能得到与我在mongoshell中得到的结果相同的结果。
答案 0 :(得分:1)
使用error
代替result
mongoose 和回调功能参数Company.aggregate([
{
$group: {
_id: {
Proname: "$Proname"
},
uniqueIds: {
$addToSet: "$_id"
},
count: {
$sum: 1
}
}
},
{
$match: {
count: {
$gte: 2
}
}
},
{
$sort: {
count: -1
}
}
]).exec(function (err,dupProds) {
if(err) {
// return err;
}
console.log("ALL DUPLICATE PRDCTS : ", dupProds);
// return dupProds
})
};
然后then
。< / p>
then
实际上aggregate([{..}]).exec().then(function(result){..})
致力于承诺,因此如果您想使用aggregate([{..}]).exec()
,则需要承诺。所以可以像
{{1}}
其中{{1}}返回承诺
答案 1 :(得分:1)
您需要在exec
之前致电then
:
Company.aggregate(params).exec().then(function (dupProds) {
console.log("ALL DUPLICATE PRDCTS : " + JSON.stringify(dupProds));
})
};
[http://mongoosejs.com/docs/api.html#aggregate_Aggregate-exec]