创建一个新文档,该文档使用aggregate对具有特定值的字段进行汇总
Creating a new document that sums up a field with a specific value using aggregate
我有下面的聚合管道。我想做一个像{upvotes : 20, downvotes : 30}
这样的文档。我想要一种方法来检查vote
字段,如果值是up
,将其添加到upvotes
字段和down
相同,但到downvotes
字段。我如何制作那个文档?
{ _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: {
_id: "$_id",
upvotes: {$sum: {$cond: [{$eq: ["up", "$review.vote"]}, 1, 0]}},
downvotes: {$sum: {$cond: [{$eq: ["down", "$review.vote"]}, 1, 0]}}
}
下面是$cond表达式操作符的文档
相关文章:
- 如何在新的Meteor Collection文档中设置服务器上的created_on字段
- 循环访问文档 (validate_doc_update) 中的 CouchDB 字段
- findAndModify,如何对文档进行操作's数组搜索对象并更改字段值
- 将文档的MongoDB字段合并到一个文档中
- 如何在一个字段中只提取6个值为true的文档
- 可编辑文档中多个字段的本地存储
- 查找包含子对象MongoDb和Node.js的特定字段的文档
- Mongoose创建一个文档,如果找不到指定的字段,则更新文档中的数组
- 仅返回嵌入文档列表中的某些字段
- 在MongoDB和Node.js中查找某个字段具有与对象完全相同元素的文档
- 将多个文档中的字段保存到对象
- 在响应之前向文档添加其他字段
- 如何从MongoDB中选择所有文档,其中一个字段不等于某个值
- MongoDB:按日历周和年聚合文档,并计算一个字段的所有值的总量
- 在MongoDB中,从文档中获取单个字段数组的最简单方法是什么
- 来自 JavaScript 网站的推文输入字段
- CouchDB:访问_design视图或提取文档字段的替代方法是什么
- 为couchdb更新nodejs的nano模块中的文档字段
- 如何$inc MongoDB文档字段与AJAX
- Mongodb /meteor收集检查子文档字段是否存在,当字段是一个变量