ruby - 如何在 mongoDB 中展平双数组?

标签 ruby arrays mongodb

我的 mongoDB 文档中的一些字段如下所示:

{
...
Countries: [["Spain", "France"]]
...
}

或者这个:

{
...
Countries: [["Spain"],["Russia", "Egypt"]]
...
}

我要做的是把 [["Spain", "France"]] 变成 ["Spain", "France"] [["Spain"],["Russia", "Egypt"]] 转换成 ["Spain", "Russia", "Egypt"],类似于使用 Ruby 中的 flatten 方法。

有没有办法在 mongoDB 中展平数组?我需要展平整个集合中所有文档中的数组,而不仅仅是单个文档,如果这很重要,那么数组中的值及其数量也会因文档而异。

我也在使用 Ruby 作为 mongo 的驱动程序,因此使用 Ruby 驱动程序的方法对我也很有用。

最佳答案

在 Mongo 3.4+ 中,您可以使用 $reduce 来展平二维数组。

db.collection.aggregate(
  [
    {
      $project: {
        "countries": {
          $reduce: {
            input: '$Countries',
            initialValue: [],
            in: {$concatArrays: ['$$value', '$$this']}
          }
        }
      }
    }
  ]
)

文档:https://docs.mongodb.com/manual/reference/operator/aggregation/reduce/

关于ruby - 如何在 mongoDB 中展平双数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27735382/

相关文章:

ruby-on-rails - 如何使用开放/封闭原则或策略模式重构此 ruby​​ 代码

php - 通过从名称数组获取值来更新数据

node.js - 选择对象后,ObjectId 会发生变化吗?

mongodb - 如何将两个数组转换为 mongoDB 中的对象,其中第一个数组具有多个相同的值

ruby - 为什么 rbenv 不能在 Ubuntu 上安装最新的 Ruby 版本?

ruby-on-rails - 在 rails 上运行 cron 作业(部署在多个服务器上)

ruby - 是否有使用普通 ruby​​ 对象并且不需要您从基类继承的 Ruby ORM?

python - 在数组末尾添加 n 个零

java - 是否可以创建一个数组列表?

java - 使用 java 驱动程序为我的模式创建 mongodb 条目