如何将MongoDB查询结果转为目标字段值数组而非对象数组?
解决方法
你可以通过两种方式实现需求:
方法一:使用distinct方法(最简洁)
distinct方法能直接返回指定字段的值数组,还支持传入查询条件过滤文档,完全匹配你的需求:
db.collection_name.distinct("TARGETFIELD", { "FIELD1": "VALUE1", "FIELD2": "VALUE2" })
执行后直接返回:["ABC", "DEF"]
方法二:使用聚合管道(更灵活,适合复杂场景)
如果后续需要扩展查询逻辑(比如添加字段处理、自定义分组规则等),可以用聚合管道实现:
db.collection_name.aggregate([ // 过滤符合条件的文档 { $match: { "FIELD1": "VALUE1", "FIELD2": "VALUE2" }}, // 将所有TARGETFIELD的值收集到数组中 { $group: { _id: null, // 不按任何字段分组,合并所有匹配文档 result: { $push: "$TARGETFIELD" } }}, // 只保留结果数组,移除_id字段 { $project: { _id: 0, result: 1 }} ])
执行后会返回包含数组的对象:{ "result": ["ABC", "DEF"] },直接提取result字段的值即可。
注意:若TARGETFIELD存在重复值,distinct会自动去重,而聚合管道的$push会保留所有值(包括重复项),可根据实际需求选择。
内容的提问来源于stack exchange,提问作者Kaushik Mahadevan
相关产品推荐
相关产品推荐

