mongodb - 选择 2 个字段并返回具有不同值的排序数组

标签 mongodb mongodb-query aggregation-framework

假设我们有以下文档:

{a: 1, b: 2},
{a: 2, b: 0},
{a: 3, b: 1}

我想要一个返回的查询:

[0, 1, 2, 3]

我想知道是否有比以下更快的方法来做到这一点:

  • 只需进行 2 个查询,一个选择 a,另一个选择 b 然后合并到我的应用程序中。
  • 使用 map reduce(与之前的方法相比,速度非常慢)

最佳答案

您需要 $group我们的文件并使用$push累加器运算符返回集合中的“a”和“b”数组。

$project您使用 $setUnion 的运算符运算符来过滤掉重复项。

db.coll.aggregate(
    [
        { "$group": { 
            "_id": null, 
            "a": { "$push": "$a" }, 
            "b": { "$push": "$b" } 
        }}, 
        { "$project": {
            "_id": 0, 
            "merged": { "$setUnion": [ "$a", "$b" ] } 
        }} 
    ]
)

产生:

{ "merged" : [ 3, 2, 0, 1 ] }

关于mongodb - 选择 2 个字段并返回具有不同值的排序数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37883879/

相关文章:

php - 不支持的驱动程序 [mongodb] Laravel

mongodb - 计算 MongoDB 集合中的字段

node.js - 需要为每个用户获取一份文档nodejs和mongodb

mongodb - 使用 $switch 将分数添加到 MongoDB 聚合

mysql - SQL 或 NoSQL 的扩展和性能

javascript - Meteor 模板助手和对集合字段的访问

MongoDB - 如何查询没有任何空格的字符串(省略带空格的字符串)和长度

MongoDB - 具有聚合的地理空间索引

c# - MongoDB 连接导致 System.Net.Sockets.SocketException

node.js - TypeError : callback. apply 不是allowDiskUse之后的函数