15

看来我不能像在 Mongodb 文档中描述的那样在 Meteor 中进行多次插入...

在我的 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

4 回答 4

25

从 Meteor 排行榜示例代码中,您似乎无法批量插入。您可以使用循环或下划线迭代函数。

使用下划线,

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

_.each(names, function(doc) { 
  Test.insert(doc);
})
于 2013-03-09T05:17:07.020 回答
7

对于这些事情,您应该始终使用批量插入。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();

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

于 2017-01-11T21:32:14.033 回答
4

截至 2018 年 11 月,您可以使用rawCollection访问 Mongo Driver 返回的集合,然后根据Mongo 文档插入一组文档

例子:

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

History.rawCollection().insert([entry1, entry2, entry3]);
于 2018-11-09T12:19:20.413 回答
1

要在您的集合中插入多条记录,您可以使用mikowals:batch-insert插件。

一个简单的例子是:

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

您在这里得到的是仅使用一个连接,您将能够一次性插入所有数据,这与 mongo 批量插入操作相同。

于 2018-03-15T03:33:44.803 回答