【问题标题】:Is it possible to add multiple documents in meteor through collection.insert()?是否可以通过 collection.insert() 在流星中添加多个文档?
【发布时间】:2013-08-24 10:37:58
【问题描述】:

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

MongoDB 从 2.2 开始支持:

db.collection.insert([{docNumber: 1},{docNumber: 2}])

是否也可以在 Meteor 中实现这种行为?比如:

myCollection.insert([{docNumber: 1},{docNumber: 2}])

目前这将被添加为一个文档。不幸的是,我不能忍受迭代器,因为用例正在加载超过 100'000 个文档。单次插入会减慢速度。

【问题讨论】:

    标签: mongodb meteor database


    【解决方案1】:

    使用 Meteor 尚无法进行批量插入。虽然你可以创建一个迭代器来帮助你在数组中插入文档

    var docs = [{docNumber: 1},{docNumber: 2}];
    
    _.each(docs, function(doc) {
        myCollection.insert(doc);
    });
    

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

    【讨论】:

    • 感谢这个解决方案,我只有一个用例,我需要加载 > 100'000 个文档。这只是为了减慢这种方式。
    • 您可能会发现最好查看github.com/meteor/meteor/tree/devel/packages/mongo-livedata 包并尝试添加公开新的2.2 批量插入方法的批量插入功能。但是,问题在于您必须继续这样做以使流星保持每个版本的最新状态,直到他们制定了正式的批量插入方法为止。如果您愿意通过它可以帮助您处理超过 10 万个文档的用例。
    • Akshat 是正确的,如果你需要灵感可以使用这个 PR:github.com/meteor/meteor/pull/1254
    【解决方案2】:

    我写了一个简单的脚本来批量插入。它仅在客户端通过将文档插入集合而没有反应性地工作。只有最后一项会调用响应式计算。

    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

    【讨论】:

    • 这对客户来说是一个不错的解决方案,应该可以加快速度!我现在正在服务器上寻找相同的东西。
    猜你喜欢
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多