账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    批量读写 怎么提高mongo写入效率?
    49
    0
    需要把一个库中的数据用脚本转化一下 写入到一些新的库中 大概有100w条如果用for实在太慢了 看了一圈 如果要用多线程 都没有特别好的最佳实践 一般业内是怎么处理呢 ?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • ←═╬∞星星点点 普通会员 1楼

      在MongoDB中,批量读写是一种在处理大量数据时提高写入效率的方式。以下是一些可以提高MongoDB批量读写效率的方法:

      1. 使用批量更新:在读取文档后,可以使用批量更新来一次性更新所有文档。这是通过将需要更新的文档集合(如文档集合的$or字段)放在一个数组中,然后在一次读取中遍历该数组并更新文档集合。以下是一个简单的例子:

      javascript db.collection.updateMany({ _id: ObjectId("5c984f36-a6c1-4074-8b4b-6544f3c39e7b") }, [ { $set: { name: "John Doe" } }, { $set: { age: 30 } } ]);

      在这个例子中,我们首先获取文档集合collection中的所有文档,然后将一个数组包含的两个文档$set操作符应用于集合中的每个文档。第一个$set操作符更新文档nameJohn Doe,第二个$set操作符更新文档age为30。

      1. 使用批量更新批量删除:如果需要删除文档集合中的所有文档,可以使用批量更新批量删除结合起来。在批量更新中,我们将要删除的文档集合存储在一个数组中,然后在一次读取中遍历该数组并更新文档集合。在批量删除中,我们首先删除数组中的所有文档,然后在读取完成后更新文档集合。

      javascript db.collection.updateMany({ _id: ObjectId("5c984f36-a6c1-4074-8b4b-6544f3c39e7b") }, [ { $inc: { count: -1 } }, { $set: { deleted: true } } ]);

      在这个例子中,我们首先增加文档集合中每个文档的count属性的值为-1,表示该文档已被删除。然后,我们在读取完成后将deleted字段设置为true,表示该文档已被删除。

      1. 使用批量插入:如果需要将大量数据一次性插入到文档集合中,可以使用批量插入。在批量插入中,我们将要插入的数据存储在一个数组中,然后在一次读取中遍历该数组并插入文档集合。

      javascript db.collection.insertMany([ { name: "John Doe", age: 30 }, { name: "Jane Doe", age: 25 }, { name: "Bob Smith", age: 35 } ]);

      在这个例子中,我们首先将数组中的三个文档插入到文档集合中,每个文档包含nameage字段的值。然后,我们在读取完成后更新文档集合,将数组中的每个文档的name字段的值替换为数组中的下一个文档的name字段的值。

      1. 使用批量更新和分页:如果需要在批量读取后进行分页处理,可以使用批量更新分页结合。在批量更新中,我们首先读取文档集合,然后将数组中的每个文档$set操作符应用于集合中的每个文档。在分页中,我们首先将文档集合按一定的页码和每页的行数分页,然后在读取完成后遍历每一页,应用$set操作符更新文档集合。

      javascript db.collection.find({ _id: ObjectId("5c984f36-a6c1-4074-8b4b-6544f3c39e7b") }).skip(100).limit(100).toArray();

      在这个例子中,我们首先通过find方法获取文档集合中的所有文档,然后通过skiplimit方法将文档集合按照页码和每页的行数分页,最后通过toArray方法将分页后的文档集合存储在一个数组中。

      这些方法都可以帮助你提高MongoDB批量读写效率,具体使用哪种方法取决于你的具体需求和数据结构。例如,如果你需要一次性更新大量文档,那么批量更新可能更有效。如果你需要删除大量文档,那么批量删除可能更有效。如果你需要分页处理文档,那么分页可能更有效。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部