如何解决MongoDB:当汇总中不存在匹配条件时,如何在$ facet中将$ count默认为0
我正在处理一个复杂的分页聚合查询,我正在尝试查看Mongo是做什么和不能做什么。我遵循了这个问题here,除了没有返回数据时,所有其他方法都工作正常。
Mongo返回:{ Metadata: [],data: [] }
,但我想看看是否有可能返回
{ Metadata: [ { count: 0 } ],data: [] }
使前端更容易处理。到目前为止,我还无法实现这一目标。
这是我正在使用的 $ facet管道的摘要:
{
"$facet": {
"Metadata": [{
"$count": "total"
}],"data": [{
"$skip": 0
},{
"$limit": 10
}]
}
}
这当然可以在后端查询之后完成,但是我真的希望Mongo能够处理它。
解决方法
您可以在最后检查条件,
-
$addFields
检查$cond
是否metadata
数组大小为零,然后返回总数为零的静态数组,否则返回原始元数据数组
// <= skipping your pipelines
{
$addFields: {
metadata: {
$cond: [
{ $eq: ["$metadata",[]] },[{ total: 0 }],"$metadata"
]
}
}
}
$switch
大小写运算符的其他选项,
-
$switch
检查第一种情况是否metadata
等于[]
,然后返回总数为零,并在default
中返回原始metadata
数组
{
$addFields: {
metadata: {
$switch: {
branches: [
{
case: { $eq: ["$metadata",then: [{ total: 0 }]
}
],default: "$metadata"
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。