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

假设我们有以下文档:

{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 ] }

https://stackoverflow.com/questions/37883879/

相关文章:

mongodb - 使用更新查询将文档值从字符串更改为 ObjectId

mongodb - Docker-MongoDB 中的身份验证问题

mongodb - 按 id 对 Mongo 文档进行分组,并按时间戳获取最新文档

ruby-on-rails - 运行 Rails 应用程序时的 Mongo::Error::NoSe

php - 在 Ubuntu 14 上将 PHP Mongo 扩展更新到 1.5

mongodb - Mongo在计算条件下排序

linux - PHP升级到7后,为什么不能使用mongodb驱动?

python - 具有完整行对象的 Mongo Distinct Query

javascript - Passport 没有保持持久的登录 session

node.js - NodeJS 崩溃 : Mongoose findById() does NOT