我喜欢在流星的集合中一次添加多个文档。
MongoDB支持2.2:
db.collection.insert([{docNumber: 1},{docNumber: 2}])
是否有可能在Meteor中实现此行为?类似的东西:
myCollection.insert([{docNumber: 1},{docNumber: 2}])
目前,这将作为一个文档添加。遗憾的是,我不能使用迭代器,因为用例正在加载超过100'000个文档。单次插入会减慢速度。
答案 0 :(得分:7)
Meteor尚无法批量插入。虽然您可以创建一个迭代器来帮助您在数组中插入文档
var docs = [{docNumber: 1},{docNumber: 2}];
_.each(docs, function(doc) {
myCollection.insert(doc);
});
有可能在服务器端执行此操作,尽管需要进行一些修改以公开批量插入方法。但问题是这个代码在客户端不起作用。
答案 1 :(得分:6)
我写了一个简单的脚本来批量插入。它只能在客户端通过将文档插入到集合而没有反应性。只有最后一项会调用反应计算。
insertBulk = function(collection, documents){
if(collection) {
return _.compact(_.map(documents, function(item){
if(_.isObject(item)) {
var _id = collection._makeNewID();
// insert with reactivity only on the last item
if(_.last(documents) === item)
_id = collection.insert(item);
// insert without reactivity
else {
item._id = _id;
collection._collection._docs._map[_id] = item;
}
return _id;
}
}));
}
}
您可以在此处找到包含removebulk()函数的示例脚本:https://gist.github.com/frozeman/88a3e47679dd74242cab