2012-04-03 5 views
10

Gibt es eine Möglichkeit, ein Array von JSON-Objekt zu einem Mongodb mit nur einem Aufruf zu speichern? so etwas wie:Wie kann ein Array von Objekten mit nur einem Aufruf in einer Mungo-DB gespeichert werden?

schemeObject.save(array_of_json_object, callback); 

Ich verwende mongoosejs

+0

Können Sie bitte die richtige Antwort aktualisieren? –

+0

@IcyFlame Ihr linked post ist technisch ein Duplikat von diesem. –

+0

@DanMandle richtig! Ich habe die Daten nicht bemerkt. Danke für das Aufzeigen. – IcyFlame

Antwort

5

Ich glaube nicht, seine möglich mit mongooosejs. Sie können jedoch BATCH-Insert von mongodb verwenden, das nativ unterstützt wird.

Hilfreiche Links:

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

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

+0

Die Antwort finden Sie in der zweiten Verknüpfung. Danke – jAckOdE

+3

Nicht mehr genau. Tun Sie dies stattdessen: http://StackOverflow.com/A/22874288/687677 – superluminary

0

Wie wäre es so etwas? Ich weiß, dass es die gesamten Array Schleifen durch .. nicht mich fragen, über den Big O dies .. wahrscheinlich nicht den besten Weg, aber nur für eine anfängliche Datendump irgendeine Art funktioniere einzufügen ..

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

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

das wäre nicht ein Batch einfügen, wenn es eins nach dem anderen! – JehandadK

23

Es gibt eine Möglichkeit zum Batch-Einfügen mit MongooseJS. Ich bin mir nicht sicher, ob es ein neues Feature ist, da diese Frage gestellt/beantwortet wurde, aber ich dachte mir, wenn jemand von einer Suche herkommen sollte, sollten sie den Weg dafür kennen.

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

Hier sind die docs: http://mongoosejs.com/docs/api.html#model_Model.create

+3

Das sollte funktionieren, wenn wir neue Dokumente erstellen möchten. Wie wäre es, ein Array oder Dokumente zu aktualisieren, die von einer Abfrage zurückgegeben wurden? – jAckOdE

+0

Dafür, ich denke, Sie müssten eine find() dann eine forEach() auf das Ergebnis, aktualisieren Sie die Werte und eine save() für jeden von ihnen. Aber ich bin neu für Mungoose. –

0

Eine andere Lösung, die ich benutzt habe. Wenn Sie Mungo mit Versprechen verwenden, können Sie dies mit Q tun.

Sie können mit Q als Standard-Versprechen für Mungo starten Sie den folgenden Code verwendet:

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

Dann können Sie eine Reihe von Dokumenten wie unten speichern. Nehmen wir an, wir speichern eine Reihe von Benutzermodellen, die ich in users Variable gezeigt habe.

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

.save() wird wieder einen q Versprechen und unter Verwendung von Array map Funktion, werden wir ein Versprechen Array mit dem Benutzermodell Array erstellen.

0

Dies funktioniert mit Mungo auch

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