2012-04-03 8 views
10

C'è un modo per salvare un array di oggetti JSON su un mongodb con solo una chiamata? qualcosa come:Come salvare un array di oggetti nel DB di mangusta con una sola chiamata?

schemeObject.save(array_of_json_object, callback); 

sto usando mongoosejs

+0

Puoi aggiorna la risposta corretta? –

+0

@IcyFlame Il post collegato è tecnicamente un duplicato di questo. –

+0

@DanMandle giusto! Non ho notato le date. Grazie per la segnalazione. – IcyFlame

risposta

5

Non credo che la sua possibile con mongooosejs. È comunque possibile utilizzare l'inserimento BATCH di mongodb, che è supportato in modo nativo.

link utili:

http://www.mongodb.org/display/DOCS/Inserting#Inserting-Bulkinserts

https://groups.google.com/forum/#!msg/mongoose-orm/IkPmvcd0kds/bZuYCN_orckJ

+0

la risposta si trova nel secondo link. Grazie – jAckOdE

+3

Non è più preciso. Fai invece questo: http://stackoverflow.com/a/22874288/687677 – superluminary

0

Che ne dite di qualcosa di simile? So che scorre l'intero array .. mi non chiedere del Big O per questo no .. probabilmente il modo migliore per inserire, ma funziona solo per un deposito di dati iniziali di qualche tipo ..

var arr = // array of objects; 
    res = []; 

arr.forEach(function (item) { 
    item.save(function (err) { 
     res.push(err); 
     if (res.length === arr.length) 
     { 
      // Done 
     } 
    }); 
}); 
+0

che non dovrebbe essere un inserto batch se è uno ad uno! – JehandadK

23

C'è un modo per inserire in batch con MongooseJS. Non sono sicuro che si tratti di una nuova funzionalità dal momento che questa domanda è stata posta/risposta, ma ho pensato che se qualcuno dovesse venire da una ricerca, dovrebbero sapere come farlo.

var array = [{ type: 'jelly bean' }, { type: 'snickers' }]; 
Candy.create(array, function (err, jellybean, snickers) { 
    if (err) // ... 
}); 

Ecco i documenti: http://mongoosejs.com/docs/api.html#model_Model.create

+3

Questo dovrebbe funzionare se vogliamo creare nuovi documenti. Che ne dici di aggiornare un array o documenti restituiti da una query? – jAckOdE

+0

Per quello, penso che dovresti fare un find() poi un forEach() sul risultato, aggiornare i valori e fare un save() per ognuno di essi. Ma sono abbastanza nuovo da Mangusta. –

0

Un'altra soluzione che ho usato. Se usi la mangusta con promesse, puoi farlo usando Q.

È possibile iniziare a utilizzare Q come la promessa di default per mangusta usando il codice seguente:

const mongoose = require('mongoose'); 
mongoose.Promise = require('q').Promise; 

quindi è possibile salvare una serie di documenti come qui di seguito. Diciamo che stiamo memorizzando una serie di modelli utente, che ho mostrato nella variabile users.

Q 
    .all(users.map(curr => curr.save())) 
    .then((results) => { //do something }) 
    .catch((err) => { //handle error }) 

.save() restituirà un q promessa e con un array map funzione, creeremo un array di promessa utilizzando la matrice modelli utente.

0

questo funziona con la mangusta e

Laptop.insertMany(laptopData, function (err, laptop) { 
    if (err) { 
    console.log(err); 
    }; 
    console.log(laptop); 
}); 
Problemi correlati