You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MongoDB中获取仅含多方向计数的无键结果并将空计数项补0

调整MongoDB聚合查询实现目标数组输出

我来帮你修改这个聚合查询,刚好能实现你想要的仅含数值的数组结果,同时为空计数补0的需求~

方法一:基于你现有代码修改(改动最小)

直接在你原来的管道后面加几步处理,就能得到[1, 0, 0, 1]这种格式:

[
  { "$facet": {
    "N": [ { "$match": { "province": "North" }}, { "$count": "N" } ],
    "E": [ { "$match": { "province": "East" }}, { "$count": "E" } ],
    "S": [ { "$match": { "province": "South" }}, { "$count": "S" } ],
    "W": [ { "$match": { "province": "West" }}, { "$count": "W" } ]
  }},
  { "$project": {
    // 用$ifNull把空计数补成0
    "N": { "$ifNull": [ { "$arrayElemAt": ["$N.N", 0] }, 0 ] },
    "E": { "$ifNull": [ { "$arrayElemAt": ["$E.E", 0] }, 0 ] },
    "S": { "$ifNull": [ { "$arrayElemAt": ["$S.S", 0] }, 0 ] },
    "W": { "$ifNull": [ { "$arrayElemAt": ["$W.W", 0] }, 0 ] }
  }},
  { "$project": {
    "_id": 0,
    // 按北、东、南、西的顺序打包成数组
    "result": ["$N", "$E", "$S", "$W"]
  }},
  { "$replaceRoot": { "newRoot": "$result" } }
]

关键改动说明:

  1. 在第二个$project里用$ifNull判断:如果某个方向没有匹配到文档(返回的是null),就自动替换成0,解决空计数补0的问题。
  2. 新增的$project把四个方向的计数按你需要的顺序放进数组result。
  3. 最后用$replaceRoot把数组直接作为输出的根文档,这样就得到无键的纯数值数组了。

方法二:更灵活的通用统计方式(适合方向可能扩展的场景)

如果以后可能新增其他方向,这种方式不用修改多个$match,只需要调整字段映射即可:

[
  // 先统计所有存在的方向的计数
  { "$group": {
    "_id": "$province",
    "count": { "$sum": 1 }
  }},
  // 把统计结果转成键值对数组
  { "$group": {
    "_id": null,
    "counts": { "$push": { "k": "$_id", "v": "$count" } }
  }},
  // 键值对转成对象
  { "$replaceRoot": {
    "newRoot": { "$arrayToObject": "$counts" }
  }},
  // 补全所有方向的计数,空的补0
  { "$project": {
    "N": { "$ifNull": ["$North", 0] },
    "E": { "$ifNull": ["$East", 0] },
    "S": { "$ifNull": ["$South", 0] },
    "W": { "$ifNull": ["$West", 0] }
  }},
  // 转成目标数组格式
  { "$project": {
    "_id": 0,
    "result": ["$N", "$E", "$S", "$W"]
  }},
  { "$replaceRoot": { "newRoot": "$result" } }
]

两种方式都能得到你想要的[1, 0, 0, 1]结果,你可以根据自己的场景选~

内容的提问来源于stack exchange,提问作者techshot nextgen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 12:42:36