我的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);
});