流星批量插入仅插入最后一项

meteor bulk insert only inserts last item

本文关键字:插入 一项 最后 流星      更新时间:2024-04-13

我正在尝试按照此方法进行批量插入:

'createTestQuestionBatch'(limit) {
    check(limit, Number);
    if (Meteor.isServer) {
      const questionItem = {
        question: "Question will be reconstructed with a number",
        category: "n3f98f4b22v948nb4v2fg4b89",
        answer: ["Yes", "No", "Maybe", "Probably"],
        localization: "en",
        testQuestion: true,
      };
      var bulk = Question.rawCollection().initializeUnorderedBulkOp();
      for (var i = 0; i < limit; i++) {
        questionItem.question = "Is this test question number " + i + "?";
        bulk.insert(questionItem);
      }
      bulk.execute(function (err) {
        if (err) {
          throw new Meteor.Error('createTestQuestionBatch', 'Bulk update operation failed.' + err);
        } else {
          console.log("Bulk question creation operation completed. " + limit + " items has been inserted.");
        }
      });
    } else {
      console.log("Bulk operation for creating tests are running on the server. Server logs will notify when operation has completed.");
    }
  }

为什么在尝试添加 100 个测试问题时只插入数字为 99 的项目?我正在运行流星 1.3。

问题是您将相同的对象传递给跨迭代insert()

mongo驱动程序不会克隆插入的文档。 相反,如果不存在_id,它会为其生成一个,并将其添加到其操作列表中。

在您的情况下,_id仅在第一次迭代中生成,因此MongoDB基本上被指示使用保存_id插入100个文档。 这导致只有1个实际的文档插入。

若要解决此问题,请在每次迭代中传递一个新对象。