是否可以通过collection.insert()在meteor中添加多个文档?

loo*_*omi 5 database mongodb meteor

我喜欢在流星的集合中一次添加多个文档.

MongoDB从2.2支持这个:

db.collection.insert([{docNumber: 1},{docNumber: 2}])
Run Code Online (Sandbox Code Playgroud)

是否有可能在Meteor中实现这种行为?就像是:

myCollection.insert([{docNumber: 1},{docNumber: 2}])
Run Code Online (Sandbox Code Playgroud)

目前,这将作为一个文件添加.遗憾的是,我不能使用迭代器,因为用例正在加载超过100'000个文档.单次插入会减慢速度.

Aks*_*hat 8

Meteor无法批量插入.虽然您可以创建一个迭代器来帮助您在数组中插入文档

var docs = [{docNumber: 1},{docNumber: 2}];

_.each(docs, function(doc) {
    myCollection.insert(doc);
});
Run Code Online (Sandbox Code Playgroud)

有可能在服务器端执行此操作,尽管需要进行一些修改以公开批量插入方法.但问题是这个代码在客户端不起作用.


Fab*_*ler 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;
        }
    }));
  }
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里找到一个示例脚本,包括removebulk()函数:https://gist.github.com/frozeman/88a3e47679dd74242cab