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

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

或者这个:
{
...
Countries: [["Spain"],["Russia", "Egypt"]]
...
}

我要做的是将[["Spain", "France"]]转换为["Spain", "France"][["Spain"],["Russia", "Egypt"]]转换为["Spain", "Russia", "Egypt"],类似于在Ruby中使用flatten方法。
MongoDB中有没有一种扁平化数组的方法?我需要扁平整个集合中所有文档中的数组,而不仅仅是单个文档,如果这很重要,那么数组中的值和数量在文档之间也会有所不同。
我还使用Ruby作为Mongo的驱动程序,所以使用Ruby驱动程序的方法对我也很有用。

最佳答案

您的国家数据格式不好,因此您可以考虑转换它们。这是一个脚本,用于在Countries字段中展平数组并保存可以在Mongo Shell中运行的原始文档:

function flattenArray(inArr) {
    var ret = [];
    inArr.forEach(function(arr) {
        if (arr.constructor.toString().indexOf("Array") > -1) {
           ret = ret.concat(flattenArray(arr));
        } else {
           ret.push(arr);
        }
    });
    return ret;
}


db.collection.find({
  'Countries': {
    '$exists': true
  }
}).forEach(function(doc){
  doc.Countries = flattenArray(doc.Countries);
  db.collection.save(doc);
});

09-18 10:34