流星批量插入仅插入最后一项
meteor bulk insert only inserts last item
我正在尝试按照此方法进行批量插入:
'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个实际的文档插入。
若要解决此问题,请在每次迭代中传递一个新对象。
相关文章:
- 如何从对象数组中获取最后一项
- 为什么只有最后一项显示,而不是全部显示
- 删除最后一项jquery
- $q.all当输入数组中的一项不是promise时,Typescript检查器失败
- 为什么我的“for”循环只获取 html 中的最后一项
- 我无法将下拉列表的默认值设置为最后一项
- 流星批量插入仅插入最后一项
- 我怎么能知道元素是最后一项
- 如何删除WinJS组绑定列表的最后一项
- 在immutable.js中更改列表中的一项
- 使用handlers.js模板以数组中的最后一项为条件
- empty().append()追加循环中的最后一项
- jQuery只附加最后一项
- 将属性添加到 for 循环中的最后一项
- 我的应用仅显示一项检索到的数据
- 如何在 visjs 时间轴中按时间顺序获取 getVisibleItems(或如何获取上一项)
- 滑动视图 - 显示下一项的预览/片段
- 通过jQuery在最后一项之后插入
- 插入排序最后一项未定义
- 如何在jquery中插入foreach后的最后一项