在Meteor Collection中插入多个文档的工作方式与纯mongodb相同吗?

时间:2013-03-09 02:10:53

标签: mongodb meteor

似乎我不能在Meteor中进行多次插入,就像在Mongodb文档中described here一样......

在我的js控制台中:

> Test.insert([{name:'hello'},{name:'hello again'}])

返回

  "g3pq8GvWoJiWMcPkC"

当我走了

Test.find().fetch()

我得到以下内容:

Object
0: Object
name: "hello"
__proto__: Object
1: Object
name: "hello again"
__proto__: Object
_id: "g3pq8GvWoJiWMcPkC"
__proto__: Object

似乎Meteor创建了一个超级文档,其中包含我试图作为单独插入的两个文档。

有人能告诉我这里的错误吗?

4 个答案:

答案 0 :(得分:24)

来自Meteor排行榜example code,看起来您无法批量插入。您可以使用循环或下划线迭代函数。

使用下划线,

var names = [{name:'hello'},{name:'hello again'}]

_.each(names, function(doc) { 
  Test.insert(doc);
})

答案 1 :(得分:6)

您应该始终使用bulk insert来完成这些事情。 Meteor并不支持开箱即用。 您可以使用batch insert plugin或访问Mongodb节点驱动程序来本机执行此操作:

var items = [{name:'hello'},{name:'hello again'}],

    testCollection = new Mongo.Collection("Test"),
    bulk = testCollection.rawCollection().initializeUnorderedBulkOp();

for (var i = 0, len = items.length; i < len; i++) {
    bulk.insert(  items[i] );
}

bulk.execute();

请注意,这仅适用于mongoDB 2.6 +

答案 2 :(得分:1)

要在您的收藏中插入多个记录,您可以使用mikowals:batch-insert插件。

一个简单的例子:

var names = [{name:'hello'},{name:'hello again'}];
yourCollection.batchInsert(names);

您在这里只使用一个连接,您可以一次插入所有数据,与mongo批量插入操作相同。

答案 3 :(得分:1)

从2018年11月开始,您可以仅使用rawCollection访问Mongo Driver返回的集合,然后按照Mongo documentation插入一系列文档。

示例:

let History = new Mongo.Collection('History');

History.rawCollection().insert([entry1, entry2, entry3]);