如何解决mongodb匹配和第2组查询
var oneWeekAgo = new Date();
oneWeekAgo.setDate(oneWeekAgo.getDate() - 7);
User.aggregate([
{ $match: { isAdmin: false,isActive: true } },{
$group: {
_id: null,totalCount: {
$sum: 1
}
}
},])
User.aggregate([
{ $match: { isAdmin: false,dateCreated: { $gte: oneWeekAgo },{
$group: {
_id: null,lastWeekTotal: {
$sum: 1
}
}
},])
是否可以合并上面的两个聚合查询?
我想统计集合中的所有条目以及一周内创建的条目。 预期结果:
[ { _id: null,totalCount: 100,lastWeekTotal: 10 } ]
解决方法
您可以像这样在$group
内合并在一起,
- $cond运算符,有三个参数
($cond: [if check condition,then,else])
- 如果条件使用$ and运算符检查条件,则为第一部分;如果条件为true,则返回
1
,否则返回0
User.aggregate([
{
$group: {
_id: null,totalCount: {
$sum: {
$cond: [
{
$and: [
{ $eq: ["$isAdmin",false] },{ $eq: ["$isActive",true] }
]
},1,0
]
}
},lastWeekTotal: {
$sum: {
$cond: [
{
$and: [
{ $gte: ["$dateCreated",oneWeekAgo] },{ $eq: ["$isAdmin",0
]
}
}
}
}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。