我有一些条目:
{ "name":"a", "value":10 }
{ "name":"b", "value":20 }
{ "name":"c", "value":10 }
...
我可以使用db.collection.find({"value":10},{"name":1, _id: false})
从查询中选择名称。它给了我以下内容:
{ "name" : "a" }
{ "name" : "c" }
...
但是,我希望它返回一个值数组,而不是一组{key:value}对。 (如[ "a", "c", ... ]
)。有没有办法只使用MongoDB
查询来实现这一点,还是应该选择并将它们放在我的应用程序中的数组中?
当前输出:
{ "name" : "a" }
{ "name" : "c" }
...
预期产出:
["a", "c", ...]
如果以上不是可能的输出,也可能是
{ "result": ["a", "c", ...] }
答案 0 :(得分:2)
db.collection.distinct( "name", { "value": 10 })
@Sagar Reddy 评论将返回设置数组:
["a", "c"]
这可能就是你所需要的。 Aniway,使用aggregation可以实现类似的更复杂的查询,您可以使用额外的聚合阶段。
db.collection.aggregate([
{ $match: { value: 10 }},
{ $group: { _id: null, result: { $addToSet: '$name' }}},
{ $project: { _id: 0, result: 1 }}
])
在group
阶段,如果您希望多次显示相同的值,addToSet
可以替换为push
。
使用addToSet
输出:
{ "result" : [ "c", "a" ] }
使用push
输出Ex:
{ "result" : [ "a", "c", "c" ] }