mongodb - $sum 字符串值与数组 MongoDB 中的 $cond
问题描述
我正在尝试$sum
一些符合下一个条件的值。
我的收藏:
{
_id: 1,
items: [
{
name: 'item1',
status: 'On'
},
{
name: 'item2',
status: 'On'
},
{
name: 'item3',
status: 'Off'
}]
}
我需要$sum
所有items
状态为“开启”的人
这就是我正在尝试的:
{
$addFields: {
itemsOn: { "$sum": { "$cond": [{ if: { $eq: ["$items.status", 'On'] } }, { then: 1 }, { else: 0 }] } },
}
}
但它不起作用,有什么帮助吗?提前致谢
解决方案
$filter
根据条件过滤项目,$size
从过滤器中获取返回元素的总数,
db.collection.aggregate([
{
$addFields: {
itemOn: {
$size: {
$filter: {
input: "$items",
cond: { $eq: ["$$this.status", "On"] }
}
}
}
}
}
])
第二个选项使用$reduce
,
$reduce
迭代数组循环items
,检查条件是否匹配,然后与值相加
db.collection.aggregate([
{
$addFields: {
itemOn: {
$reduce: {
input: "$items",
initialValue: 0,
in: {
$cond: [
{ $eq: ["$$this.status", "On"] },
{ $sum: ["$$value", 1] },
"$$value"
]
}
}
}
}
}
])
推荐阅读
- javascript - 如何缩放标签大小雷达图chart.js
- javascript - 问题Highchart在悬停图例上显示/隐藏数据标签
- azure-synapse - Azure Synapse Analytics Pipeline - 哪个 IP 范围?
- spring-boot - Spring Boot + JPA (Hibernate) - 在 OneToMany 双向删除实体时出现 ConcurrentModificationException
- c++ - c ++损坏的套接字数据
- jquery - 三个按钮上的鼠标和单击事件
- python - 我正在尝试使用 on_raw_reaction_add 事件制作 discord.py 验证系统
- django - Azure Django 应用有 SECRET_KEY 异常
- android - 没有名称作为应用程序本身的包名称
- javascript - 执行 Html 标签时如何重置角度范围变量?