如何将MongoDB aggregate查询返回的_id对象转为ObjectId数组
方案1:直接对聚合游标使用map方法(最简洁)
原有查询逻辑不用改动,只需在聚合语句后追加.map()方法提取每个文档的_id字段即可,执行后直接返回你需要的ObjectId数组格式:
var $match = { isTask: { $ne: true }}; var $project = {_id: 1} ; db.getCollection('foo').aggregate([{ $match }, {$project}]).map(doc => doc._id)
方案2:在聚合管道内完成分组聚合
如果希望完全通过MongoDB聚合管道实现结果格式化,可以新增$group阶段把所有_id合并为单个数组,最终取出结果即可:
var $match = { isTask: { $ne: true }}; db.getCollection('foo').aggregate([ { $match }, { $group: { _id: null, idList: { $push: "$_id" } }}, { $project: { _id: 0 }} ]).next().idList
注意:如果查询结果集非常大,方案1更稳妥。因为方案2会把所有_id放入单个聚合返回文档,受MongoDB单文档最大16MB的大小限制。
内容的提问来源于stack exchange,提问作者CommonSenseCode
相关产品推荐
相关产品推荐

