mongodb - MongoDB在找不到结果时返回格式化对象
问题描述
我的MongoDB
聚合管道中有以下阶段,它返回销售的数量和总和,效果很好:
{
$lookup: {
from: 'sales',
let: { part: '$_id' },
pipeline: [
{ $match: { $and: [{ $expr: { $eq: ['$partner', '$$part'] } }] } },
{ $group: { _id: null, qty: { $sum: 1 }, soldFor: { $sum: '$soldFor' } } },
{ $project: { _id: 0, qty: 1, soldFor: 1 } }],
as: 'sales'}},
{ $unwind: { path: '$sales', preserveNullAndEmptyArrays: true } },
{ $project: { _id: 1, sales: 1 }
}
但是,如果没有销售,则$project
投影返回一个空的销售对象,但我真正想要的是返回一个已完成的对象,但带有 0 - 像这样:
{
sales: {
qty: 0,
soldFor: 0
}
}
解决方案
您可以$cond
在此处使用运算符
{
"$project": {
"_id": 1,
"sales": {
"$cond": [
{ "$eq": [{ "$size": "$sales" }, 0] },
{
"sales": {
"qty": 0,
"soldFor": 0
}
},
"$sales"
]
}
}
}
推荐阅读
- javascript - 从 js 加载 DOM 后立即重新加载页面
- amazon-iam - AWS ECS 任务无法启动,因为守护进程无法创建日志流
- eclipse - 调用 maven-war-plugin 期间的 NPE
- pandas - 用 0 替换轴 0 上的重复项
- python - 如何使用 tweepy 获取超过 500 个 Twitter 用户的关注者和关注者列表?
- sapui5 - 无法将 CAP 应用程序部署到 Cloud Foundry
- angular - TSLint:现有规则的自定义错误消息
- amazon-ec2 - 在 ec2 上安装 google-cloud-sdk 的公钥问题
- sql - SQL 只返回重复记录
- java - Jboss 使用 Keycloak 记录到 slf4j/log4j2