Mongo:我是否可以根据唯一键更新(如果已有数据,则插入或更新)数据列表

问题描述 投票:0回答:1

我有数据列表-

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

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

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

我正在使用MongoDB Shell版本4.2.3。

mongodb mongodb-query
1个回答
0
投票

除非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();
© www.soinside.com 2019 - 2024. All rights reserved.