2013-03-09 11 views
13

Sembra che io non posso fare un inserto multiplo in Meteor nello stesso modo in cui è described here nella documentazione MongoDB ...L'inserimento di più documenti in una collezione Meteor funziona allo stesso modo di mongodb puro?

Nella mia console js:

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

Riporta

"g3pq8GvWoJiWMcPkC" 

E quando vado

Test.find().fetch()

ottengo il seguente:

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

Sembra Meteor crea un documento eccellente che comprende i due che sto cercando di inserire quelli separati.

Qualcuno potrebbe dirmi che cosa sto facendo male qui?

risposta

25

Dalla classifica Meteor example code, sembra che non sia possibile inserire in blocco. È possibile utilizzare una funzione di iterazione di loop o underscore.

Utilizzando sottolineatura,

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

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

Grazie @Prashant, questo è quello che ho fatto. Strano che l'inserimento di massa non funzioni. – Mercutionario

+1

Posso suggerire di modificarlo a '_.each (nomi, funzione (doc) { Test.insert (doc); }) perché altrimenti il ​​documento verrebbe annidato in' name' – Akshat

+2

Si consiglia di utilizzare [ Array.prototype.forEach()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) invece, poiché è un'alternativa a _.each() che ora è supportato nel nodo e in molti browser web. –

3

È consigliabile utilizzare sempre bulk insert per queste cose. Meteor non supporta questo fuori dalla scatola. È possibile utilizzare il batch insert plugin o accedere al driver MongoDB nodo per farlo in modo nativo:

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

Si noti che questo funziona solo su MongoDB 2.6+

Problemi correlati