node.js - MongoDB:如何使用 $lte/lt 选择所有符合特定 $sum 条件的文档?
问题描述
考虑 :
EightWeekGamePlan.aggregate(
[
{ $match: { LeadId: { $in: leads }, Week: week,
// total: { $lt: 5 } // This part doesn't work
} },
{
$group: {
_id: {
LeadId: "$LeadId",
total: { $sum: "$TotalClaimsLeftToBeClaimedByClientType" }
}
}
}
]
我怎样才能选择它们总和$TotalClaimsLeftToBeClaimedByClientType
小于的所有文件5
?
我试过了,total: { $lt: 5 }
但我得到了一个空数组。
这是架构:
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const EightWeekGamePlanSchema = new Schema({
Week: {
type: Number,
required: true
},
LeadId: {
type: String,
required: true
},
PackageId: {
type: String,
required: true
},
BusinessName: {
type: String,
required: true
},
PhoneNumberMasque: {
type: String,
required: true
},
City: {
type: String,
required: true
},
Rooms: {
type: Number,
required: true
},
LeadStartDate: {
type: Date
},
LeadEndDate: {
type: Date
},
TargetedToBeClaimedByClientType: {
type: Number,
required: true
},
TotalClaimsLeftToBeClaimedByClientType: {
// incresed by 1 every time it's claimed
type: Number,
required: true
},
TotalClaimsToBeClaimedByClientType: {
// Stays fixed
type: Number,
required: true
},
Status: {
type: Number,
required: true
},
InsertDate: {
type: Date,
default: Date.now
}
});
module.exports = EightWeekGamePlan = mongoose.model(
"eightweekgameplan",
EightWeekGamePlanSchema
);
解决方案
根据您的查询,试试这个:
EightWeekGamePlan.aggregate(
[
{
$match: {
LeadId: { $in: leads }, Week: week
}
},
{
$group: {
_id: {
LeadId: "$LeadId",
total: { $sum: "$TotalClaimsLeftToBeClaimedByClientType" }
}
}
}, {
$match: {
'_id.total': { $lte: 5 }
}
}
])
从上面它$match
不起作用,因为你total
不是顶级字段,它在里面_id
。所以它基本上是基于LeadId + sum of TotalClaimsLeftToBeClaimedByClientType
. 以防万一您只想根据LeadId
以下一项进行分组。
(或)您可以更改查询:
EightWeekGamePlan.aggregate(
[
{
$match: {
LeadId: { $in: leads }, Week: week
}
},
{
$group: {
_id: {
LeadId: "$LeadId"
},
total: { $sum: "$TotalClaimsLeftToBeClaimedByClientType" }
}
}, {
$match: {
'total': { $lte: 5 }
}
}
])
推荐阅读
- vue.js - 避免重新渲染后滚动到顶部
- python - Celery:为什么从接受任务到开始执行任务有几秒钟的时间间隔?
- php - 如何为使用自定义函数实例化的类添加自动完成功能?
- spring - 结合OAuth2和http基本认证spring security
- rx-swift - 在 RXSwift 中返回 BehaviourSubject
- android - 如何从android中的字符串文件夹中调用值?
- php - 使用 Google 登录并抛出 invalid_grant
- google-cloud-firestore - Firestore 集合组规则
- java - 如何在骆驼 DSL java 中检索 aws sqs 消息属性?
- python - Python:将 scrypt 从子文件夹导入另一个子文件夹