加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 03:24:13 所属栏目:百科 来源:网络整理
导读:我的mongoDB文档中的一些字段如下所示: {...Countries: [["Spain","France"]]...} 或这个: {...Countries: [["Spain"],["Russia","Egypt"]]...} 我想做的是将[[“西班牙语”,“法国”]]变成[“西班牙语”,“法国”]和[[“西班牙语”],[“俄罗斯”,“埃及”
我的mongoDB文档中的一些字段如下所示:

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

或这个:

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

我想做的是将[[“西班牙语”,“法国”]]变成[“西班牙语”,“法国”]和[[“西班牙语”],[“俄罗斯”,“埃及”]进入[“西班牙“,”俄罗斯“,”埃及“,类似于在Ruby中使用flatten方法.

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

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

解决方法

您的国家/地区数据格式不佳,因此您可以考虑转换它们.这是一个在“国家/地区”字段中展平数组的脚本,并将其保存为可以在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);
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读