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

Mer*_*rio 15 mongodb meteor

我似乎无法在Meteor中进行多次插入,就像在Mongodb文档中描述的那样...

在我的js控制台中:

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

它回来了

  "g3pq8GvWoJiWMcPkC"
Run Code Online (Sandbox Code Playgroud)

当我走的时候

Test.find().fetch()

我得到以下内容:

Object
0: Object
name: "hello"
__proto__: Object
1: Object
name: "hello again"
__proto__: Object
_id: "g3pq8GvWoJiWMcPkC"
__proto__: Object
Run Code Online (Sandbox Code Playgroud)

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

有人能告诉我这里我做错了什么吗?

Pra*_*ant 25

从Meteor排行榜示例代码中,看起来您无法批量插入.您可以使用循环或下划线迭代功能.

使用下划线,

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

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

  • 我推荐使用[Array.prototype.forEach()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach),因为它是_的替代品.each()现在在Node和许多Web浏览器中都受支持. (2认同)
  • 如果我没有弄错的话,下划线会在可用时回退到本机实现,因此只需要直接使用本机实现或让下划线为您处理它. (2认同)

Dim*_*iet 6

您应该始终使用批量插入这些东西.Meteor并不支持开箱即用.您可以使用批量插入插件或访问节点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();
Run Code Online (Sandbox Code Playgroud)

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