【问题标题】:Mongo: Can i upsert(insert or update if data already exists) a list of data on the basis of a unique keyMongo:我可以根据唯一键插入(如果数据已存在则插入或更新)数据列表
【发布时间】:2020-04-13 13:00:10
【问题描述】:

我有一个数据列表-

{bookName: book1,
bookId: bookId1,
bookType: type1,
publisher: publisher1,
uniqueCombo: "bookId" + "publisher"}

在这种情况下,我的唯一标识符是 uniqueCombo。我想根据 uniqueCombo 将这些数据插入到我的 mongo 集合中。如果集合中不存在最新数据的唯一 uniqueCombo,则插入,否则更新找到 uniqueCombo 的文档。

我可以在这里使用循环并一一更新数据,但我不想使用循环。或者我可以在字段 uniqueCombo 上使用唯一索引来完成这项工作,但我需要知道是否有其他方法可以实现这一点。

我正在使用 MongoDB shell 版本 v4.2.3。

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    除非将uniqueCombo 重命名为_id,否则您将不得不使用循环。但是,您可以使用批量运算符将其构建为单个操作。

    var bulk = db.users.initializeUnorderedBulkOp();
    
    
    // foreach book
    for (var i = 0; i < books.length; i++) {
      var book = books[i];
      bulk.find({
        uniqueCombo: book.bookId + book.publisher
      }).upsert().updateOne({
        {
          bookName: book.bookName,
          bookId: book.bookId,
          bookType: book.bookType,
          publisher: book.publisher,
          uniqueCombo: book.bookId + book.publisher
        }
      });
    
    }
    
    bulk.execute();
    

    【讨论】:

      猜你喜欢
      • 2020-04-04
      • 1970-01-01
      • 2015-12-17
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多