Javascript 使用聚合创建一个新文档,该文档使用特定值对字段进行汇总
我从聚合管道中获得以下信息。我想制作一个像这样的文档{upvotes:20,downvotes:30}。我想要一种方法来检查Javascript 使用聚合创建一个新文档,该文档使用特定值对字段进行汇总,javascript,node.js,mongodb,mongoose,aggregation-framework,Javascript,Node.js,Mongodb,Mongoose,Aggregation Framework,我从聚合管道中获得以下信息。我想制作一个像这样的文档{upvotes:20,downvotes:30}。我想要一种方法来检查投票字段,如果值是向上则将其添加到向上投票字段,对于向下字段也是如此,但是添加到向下投票字段。我如何制作该文档 { _id: 57aea6791016c0b023a71e9d, review: { _id: 57aeb0ee1015118c2b19c8b9, updatedAt: Fri Aug 12 2016 22:33:17 GMT-0700
投票
字段,如果值是向上
则将其添加到向上投票
字段,对于向下
字段也是如此,但是添加到向下投票
字段。我如何制作该文档
{ _id: 57aea6791016c0b023a71e9d,
review:
{ _id: 57aeb0ee1015118c2b19c8b9,
updatedAt: Fri Aug 12 2016 22:33:17 GMT-0700 (Pacific Daylight Time),
createdAt: Fri Aug 12 2016 22:32:30 GMT-0700 (Pacific Daylight Time),
vote: 'up',
reviewText: 'test pleas',
company: 57aea6791016c0b023a71e9d,
companyName: 'comp1',
userType: 'anon',
user: 57aeb0dd1015118c2b19c8b8,
statements: [Object],
__v: 0,
className: '',
momented: 'a minute ago' } },
{ _id: 57aea6791016c0b023a71e9d,
review:
{ _id: 57aeb11d3a6bd2cc24b080ad,
updatedAt: Fri Aug 12 2016 22:33:17 GMT-0700 (Pacific Daylight Time),
createdAt: Fri Aug 12 2016 22:33:17 GMT-0700 (Pacific Daylight Time),
vote: 'down',
reviewText: 'This will hopefully be good',
company: 57aea6791016c0b023a71e9d,
companyName: 'comp1',
userType: 'anon',
user: 57aeb1033a6bd2cc24b080ac,
statements: [Object],
__v: 0,
className: 'thisUser',
momented: 'a few seconds ago' } } ]
迄今为止的聚合
Comps.aggregate([
{"$unwind" : "$reviews"},
{
"$lookup":{
"from" : "reviews",
"localField" : "reviews",
"foreignField" : "_id",
"as" : "review"
}
},
{ "$unwind": "$review" },
{$project : {
review:1
}}
一种可能的解决方案是使用$cond操作符将“向上”/“向下”映射到1/0,以便在$group阶段轻松求和。我认为在当前聚合管道中添加以下内容应该可以:
$group: {
_id: "$_id",
upvotes: {$sum: {$cond: [{$eq: ["up", "$review.vote"]}, 1, 0]}},
downvotes: {$sum: {$cond: [{$eq: ["down", "$review.vote"]}, 1, 0]}}
}
以下是有关的文档