2016-04-27 13 views
10

Ich frage mich, wie ich Array von Objekten in Mongo-Sammlung "root-level Dokumente" mit eigenen vordefinierten _id-Werte einfügen konnte.Array von Objekten in MongoDB einfügen

Ich habe versucht, db.MyCollection.insert(array);, aber es erstellt verschachtelte Dokumente unter einem einzigen generierten _id in MongoDB.

var array = [ 

     { _id: 'rg8nsoqsxhpNYho2N', 
     goals: 0, 
     assists: 1, 
     total: 1     }, 


     { _id: 'yKMx6sHQboL5m8Lqx', 
     goals: 0, 
     assists: 1, 
     total: 1     }]; 

db.MyCollection.insert (array);

enter image description here

Was ich will

enter image description here

+1

'db.MyCollection.insert (Array)' sollte funktionieren. Erhalten Sie eine Fehlermeldung? – styvane

+0

Einfügen Prozess funktioniert und ich habe die Daten in der Sammlung, aber ich möchte Objekte auf "root-level" und jetzt sind sie unter "0" eingefügt: {}, "1": {} und so weiter. Ich möchte alle meine Objekte als "root-level" -Dokument mit meinem _id-Wert einfügen – justdiehard

+0

Mit dem Dokument, das Sie uns zeigen, können Sie dieses Ergebnis nicht erhalten. – styvane

Antwort

0

können Sie MongoDB Bulk verwenden mehrere Dokumente in einem einzigen Aufruf an die Datenbank einzufügen.

Erste Iterierte über dem Array und rufen Sie die bulk Methode für jedes Element:

bulk.insert(item) 

Nach der Schleife, rufen execute:

bulk.execute() 

Werfen Sie einen Blick auf die referierten Dokumentation mehr zu erfahren.

3

Warum nicht iterieren die Array-Objekte, und sie einer nach dem anderen einfügen?

array.forEach((item) => db.MyCollection.insert(item)); 
+0

Ich habe dies getan, aber es nicht lassen Sie mich hinzufügen "Ergebnis/erfolgreiche" -Funktion in einfügen – justdiehard

0

db.collection.insertMany() ist, was Sie brauchen (von 3,2 unterstützt):

db.users.insertMany(
    [ 
    { name: "bob", age: 42, status: "A", }, 
    { name: "ahn", age: 22, status: "A", }, 
    { name: "xi", age: 34, status: "D", } 
    ] 
) 

Ausgang:

{ 
    "acknowledged" : true, 
    "insertedIds" : [ 
     ObjectId("57d6c1d02e9af409e0553dff"), 
     ObjectId("57d6c1d02323d119e0b3c0e8"), 
     ObjectId("57d6c1d22323d119e0b3c16c") 
    ] 
} 
+0

gibt es eine Möglichkeit, viele ähnliche "upsert"? Ich möchte jedes Mal ein Array pushen, aber meistens werden die Elemente existieren – PirateApp