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

MongoDB如何提取所有文档中的非空admins字段值列表?

解决方法

要提取所有非空admins字段中的元素并合并为一个列表,可以使用MongoDB的聚合管道或投影结合客户端处理来实现,具体方案如下:

方法一:聚合管道直接生成目标列表

通过聚合管道完成过滤、拆分数组、收集元素的全流程,直接得到合并后的列表:

db.data.aggregate([
  // 过滤掉admins为空的文档
  { $match: { admins: { $exists: true, $not: { $size: 0 } } } },
  // 将每个文档的admins数组拆分为单个元素文档
  { $unwind: "$admins" },
  // 收集所有admins元素到一个数组($addToSet自动去重,无需去重则换用$push)
  { $group: { _id: null, allAdmins: { $addToSet: "$admins" } } },
  // 仅保留目标数组字段,移除默认分组_id
  { $project: { _id: 0, allAdmins: 1 } }
])

执行后返回结果:

{ "allAdmins" : [ "adam", "ken", "rebecca" ] }

方法二:投影限制字段+客户端合并

如果场景简单,可以先通过投影只返回admins字段,再在客户端合并数组:

db.data.find(
  { admins: { $exists: true, $not: { $size: 0 } } },
  { _id: 0, admins: 1 }
)

这会返回各文档的admins数组:

{ "admins" : [ "adam", "ken" ] }
{ "admins" : [ "rebecca" ] }

后续在客户端(如Node.js、Python)用数组拼接方法(比如Array.prototype.concat)将这些数组合并为一个列表即可。

注意

你给出的预期结果中把adam误写为admin,实际执行上述语句会得到正确的adam元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:15:46