【问题标题】:Batch update with Mongoose使用 Mongoose 进行批量更新
【发布时间】:2012-08-23 02:17:32
【问题描述】:

我正在从 RETS(XML) 提要中提取数据,并使用 node 和 mongoose 将其保存在本地 MongoDB 中。

我需要定期更新文档并删除不活动的文档以及添加新文档。我没有对 Mongo 或 RETS 服务器进行多次查询,而是同时拉取并循环访问数据。

这很好用,但是有没有办法通过更新和插入将 Mongoose 结果保存回数据库?还是我需要找到每个文档并单独更新?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    为了完整性,如果任何人有多个查询条件,并且想为每个查询条件匹配的文档添加新字段,那么我们可以使用

    var bulk = Person.collection.initializeUnorderedBulkOp();
    bulk.find(query1).update(update1);
    bulk.find(query2).update(update2);
    bulk.execute(callback);
    

    在以下文档中,据说db.collection.initializeUnorderedBulkOp()

    初始化并返回一个新的 Bulk() 操作构建器 收藏。 builder构造一个write的无序列表 MongoDB 批量执行的操作。 MongoDB 执行于 并行列表中的写操作。

    https://docs.mongodb.org/v3.0/reference/method/db.collection.initializeUnorderedBulkOp/

    【讨论】:

    • 在更新中,如何引用正在更新的文档?
    【解决方案2】:

    在 MongoDB 上,要使用 Mongoose 更新多个文档(不仅仅是一个),您可以使用 multi 选项:

    Model.updateMany({ 
      size: 'lage'
    }, { 
      $set: { size: 'large' }
    });
    

    updating documentshere 的 Mongoose 文档中查看更多信息

    【讨论】:

    • 但是我会处理成百上千的文档。这种方式可以批量更新吗?
    • 是的,您可以输入{ multi: true } 选项。如所述here
    • 如何批量更新字段? ex-users.email、users.address、users.first 等。在这种情况下,我有一个 users 对象。我不想提及每个领域。我想要类似 {$set: {"users.$.": users}}
    • @VikasChauhan 好吧,您必须指定要将电子邮件更新到哪个用户?或者您想让所有用户的电子邮件、地址等都相同?
    • @GianfrancoP。这将是我在条件中指定的唯一单个用户。如果我正在更新单个列 {$set: {'users.$.field': fieldvalue}} 那么它将完全正常工作,但是当有多个值时,在这种情况下,它不起作用。但我找到了一种方法。谢谢
    猜你喜欢
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 2012-09-21
    • 2016-05-02
    相关资源
    最近更新 更多