2013-03-09 11 views
13

Wydaje się, że nie może zrobić wiele wkładkę w Meteor ten sam sposób jest described here w dokumentacji MongoDB ...Czy wstawianie wielu dokumentów w zbiorze Meteor Collection działa tak samo jak czysty mongodb?

W moim konsoli JS:

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

zwraca

"g3pq8GvWoJiWMcPkC" 

I kiedy idę

Test.find().fetch()

uzyskać następujące:

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

Wydaje Meteor tworzy super dokument obejmującej obydwa próbuję wstawić jako oddzielne nich.

Czy ktoś może mi powiedzieć, co robię źle?

Odpowiedz

25

Z tablicy wyników meteorytów example code wygląda na to, że nie można wstawić zbiorczo. Możesz użyć funkcji pętli lub podkreślenia iteracji.

Korzystanie podkreślenia,

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

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

Dzięki @Prashant, że to, co zrobiłem. Dziwne, że wkładka zbiorcza nie działa. – Mercutionario

+1

Mogę zaproponować, abyś je zmodyfikował do '_.each (imiona, funkcje (doc) { Test.insert (doc); })' ponieważ w przeciwnym razie dokument byłby zagnieżdżony w 'name' – Akshat

+2

Polecam używając [ Array.prototype.forEach()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) zamiast tego, ponieważ jest to alternatywa dla _.each() to jest teraz obsługiwane w Węzłach i wielu przeglądarkach internetowych. –

3

Zawsze należy użyć bulk insert tych rzeczy. Meteor nie obsługuje tego po wyjęciu z pudełka. Można użyć batch insert plugin lub dostępu do węzła kierowcy MongoDB to zrobić natywnie:

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(); 

Zauważ, że to działa tylko na MongoDB 2.6+