Mongo将嵌入式文档转换为数组

西达斯

有没有一种方法可以将嵌套的文档结构转换为数组?下面是一个示例:

输入

"experience" : {
        "0" : {
            "duration" : "3 months",
            "end" : "August 2012",
            "organization" : {
                "0" : {
                    "name" : "Bank of China",
                    "profile_url" : "http://www.linkedin.com/company/13801"
                }
            },
            "start" : "June 2012",
            "title" : "Intern Analyst"
        }
    },

预期产量:

"experience" : [
           {
            "duration" : "3 months",
            "end" : "August 2012",
            "organization" : {
                "0" : {
                    "name" : "Bank of China",
                    "profile_url" : "http://www.linkedin.com/company/13801"
                }
            },
            "start" : "June 2012",
            "title" : "Intern Analyst"
        }
    ],

目前,我正在使用脚本来遍历每个元素,将它们转换为数组,最后更新文档。但这要花费很多时间,是否有更好的方法呢?

布雷克七世

您仍然需要遍历内容,但是应该使用批量操作来写回:

对于MongoDB 2.6和更高版本:

var bulk = db.collection.initializeUnorderedBulkOp(),
    count = 0;

db.collection.find({ 
   "$where": "return !Array.isArray(this.experience)"
}).forEach(function(doc) {
    bulk.find({ "_id": doc._id }).updateOne({
        "$set": { "experience": [doc.experience["0"]] }
    });
    count++;

    // Write once in 1000 entries
    if ( count % 1000 == 0 ) {
        bulk.execute();    
        bulk = db.collection.initializeUnorderedBulkOp();
    }
})

// Write the remaining
if ( count % 1000 != 0 )
    bulk.execute();

或在现代版本的MongoDB 3.2和更高版本中,bulkWrite()首选方法:

var ops = [];

db.collection.find({ 
   "$where": "return !Array.isArray(this.experience)"
}).forEach(function(doc) {
   ops.push({
       "updateOne": {
           "filter": { "_id": doc._id },
           "update": { "$set": { "experience": [doc.experience["0"]] } }
       }
   });

   if ( ops.length == 1000 ) {
       db.collection.bulkWrite(ops,{ "ordered": false })
       ops = [];
   }
})

if ( ops.length > 0 )
    db.collection.bulkWrite(ops,{ "ordered": false });

因此,当通过游标写回数据库时,必须进行设置为“无序”的批量写操作。每1000个请求中只有一个写入/响应,这减少了很多开销,并且“无序”意味着写入可以并行发生,而不是串行发生。这一切都使其速度更快。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从嵌入式文档数组将mongodb中的ISO日期转换为'yyyy-mm-dd hh:mm:ss'?

来自分类Dev

在MongoDB中手动将嵌入式文档转换为引用

来自分类Dev

JODConverter&LibreOffice:使用嵌入式图像将文档转换为html

来自分类Dev

如何将杂项文档转换为JSON,从而去除嵌入式文档ID,但保留主文档ID?

来自分类Dev

如何将杂项文档转换为JSON,从而去除嵌入式文档ID,但保留主文档ID?

来自分类Dev

Mongo嵌入式文档字段查询

来自分类Dev

将文本阴影转换为嵌入式SVG样式的嵌入式阴影

来自分类Dev

将ArrayList嵌入式循环转换为迭代器

来自分类Dev

将链接的图像转换为嵌入式图像

来自分类Dev

春季查询嵌入式文档的数组

来自分类Dev

转换为嵌入式红宝石

来自分类Dev

使用索引键更新mongo文档中大型嵌入式数组的优化方法

来自分类Dev

如何从MONGO文档中的嵌入式数组中选取多个元素

来自分类Dev

TIKA将带有嵌入式图像的Word文档转换为HTML

来自分类Dev

从嵌入式文档Mongo Java获得价值

来自分类Dev

从Mongo Engine中的ListfField删除嵌入式文档

来自分类Dev

Mongo + Ruby Rails:获取所有嵌入式文档

来自分类Dev

查询具有大小的Mongo嵌入式文档

来自分类Dev

如何使用Mongoose将值推入MongoDB中嵌入式文档中的数组?

来自分类Dev

php:将mongodb嵌入式文档查询到数组中

来自分类Dev

Mongodb:将字段添加到嵌入式文档中(无数组)

来自分类Dev

如何在嵌入式数组mongodb中查询嵌入式文档

来自分类Dev

从mongo引擎中的另一个嵌入式文档访问嵌入式文档

来自分类Dev

如何使用嵌入式Tomcat 8和Spring Boot将子域转换为路径

来自分类Dev

如何将内部具有嵌入式对象的对象列表转换为DataTable

来自分类Dev

将嵌入式SVG转换为png时出现样式错误

来自分类Dev

如何将包含嵌入式对象的字符串转换为对象类型?

来自分类Dev

将svg标签转换为图像中的嵌入式svg

来自分类Dev

将html原始文本转换为嵌入式文本(删除空格)Regex Javascript

Related 相关文章

  1. 1

    如何从嵌入式文档数组将mongodb中的ISO日期转换为'yyyy-mm-dd hh:mm:ss'?

  2. 2

    在MongoDB中手动将嵌入式文档转换为引用

  3. 3

    JODConverter&LibreOffice:使用嵌入式图像将文档转换为html

  4. 4

    如何将杂项文档转换为JSON,从而去除嵌入式文档ID,但保留主文档ID?

  5. 5

    如何将杂项文档转换为JSON,从而去除嵌入式文档ID,但保留主文档ID?

  6. 6

    Mongo嵌入式文档字段查询

  7. 7

    将文本阴影转换为嵌入式SVG样式的嵌入式阴影

  8. 8

    将ArrayList嵌入式循环转换为迭代器

  9. 9

    将链接的图像转换为嵌入式图像

  10. 10

    春季查询嵌入式文档的数组

  11. 11

    转换为嵌入式红宝石

  12. 12

    使用索引键更新mongo文档中大型嵌入式数组的优化方法

  13. 13

    如何从MONGO文档中的嵌入式数组中选取多个元素

  14. 14

    TIKA将带有嵌入式图像的Word文档转换为HTML

  15. 15

    从嵌入式文档Mongo Java获得价值

  16. 16

    从Mongo Engine中的ListfField删除嵌入式文档

  17. 17

    Mongo + Ruby Rails:获取所有嵌入式文档

  18. 18

    查询具有大小的Mongo嵌入式文档

  19. 19

    如何使用Mongoose将值推入MongoDB中嵌入式文档中的数组?

  20. 20

    php:将mongodb嵌入式文档查询到数组中

  21. 21

    Mongodb:将字段添加到嵌入式文档中(无数组)

  22. 22

    如何在嵌入式数组mongodb中查询嵌入式文档

  23. 23

    从mongo引擎中的另一个嵌入式文档访问嵌入式文档

  24. 24

    如何使用嵌入式Tomcat 8和Spring Boot将子域转换为路径

  25. 25

    如何将内部具有嵌入式对象的对象列表转换为DataTable

  26. 26

    将嵌入式SVG转换为png时出现样式错误

  27. 27

    如何将包含嵌入式对象的字符串转换为对象类型?

  28. 28

    将svg标签转换为图像中的嵌入式svg

  29. 29

    将html原始文本转换为嵌入式文本(删除空格)Regex Javascript

热门标签

归档