2015-06-07 23 views
7

ich ein paar Probleme damit haben, das ist was es schwierig macht, so ...Wie importieren json in MongoDB Mongoose mit

I Mongoose und MongoLab verwende, kann ich Daten speichern und abrufen, es ganz gut , aber ich möchte ein System, das es mir ermöglicht, einen Basissamen der Datenbank zu erstellen.

Ich habe die Schemas für die Sammlungen erstellt, aber keine werden ausgeführt, da keine Daten vorhanden sind, daher kann ich keinen normalen Mongoimport ausführen, da die Sammlung noch nicht erstellt wurde.

Ich möchte etwas zu meinem Knotenserver hinzufügen, damit die Sammlung, wenn sie nicht existiert oder leer ist, ein Schema für eine Sammlung lädt und dann den JSON für die Seeddaten einfügt.

so das ich habe ...

var Club = require('./schemas/Club'); 

ich normalerweise Club.find verwenden oder Club.save etc, das ist gut funktioniert.

Ich möchte nur eine Sammlung von Objekten in der Club-Sammlung speichern, die es erstellen muss.

Ich habe in Mungo-Fixture untersucht, aber es wurde nicht in Jahren aktualisiert, und es gibt wahrscheinlich eine Möglichkeit, dies ohne so viel zusätzlichen Code zu tun, wie ich das Schema definiert habe, und das Array von Json bereit.

Dies ist das Erfolgsereignis, für das ich aufgelistet habe, wenn ich denke, dass ich die Prüfung und den Import durchführen möchte.

mongoose.connection.on('open', function() { 
    console.log('mongoose.connection.opened'); 
}); 

auch zu berücksichtigen, wenn ich zwei Sammlungen schaffen wollte, und wenn es den ObjectId() für die Elemente in der ersten Sammlung erzeugt, kann ich mich vorstellen will, zu denen in der zweiten Sammlung als ref verwenden .

Angenommen, Club-Objekte haben nur eine String-Eigenschaft für jetzt.

// contents of data/club.json 
[ 
    { 'name' : 'Barcelona' }, 
    { 'name' : 'Real Madrid' }, 
    { 'name' : 'Valencia' } 
] 

viel Jede Hilfe

Antwort

9

geschätzt Wenn ich es gut verstehen, alles was Sie brauchen ein JSON-Dokument auf Ihren MongoDB Sammlung von Mongoose zu laden ist. Da Ihr Modell den Namen Club hat, können Sie über Club.collection auf rohe Treibermethoden zugreifen. Und verwenden Sie insertMany, um zu erreichen, was Sie wollen.

Hier ist ein Stand-alone-Beispiel (die interessanten Sachen sind am Ende):

> var mongoose = require('mongoose') 
> var assert = require('assert') 

> mongoose.connect('mongodb://localhost/test'); 

> var Schema = mongoose.Schema 
> var clubSchema = new Schema({ 
... name: String, 
... }) 

> var Club = mongoose.model('Club', clubSchema) 

// Now, the interesting part: 
> data = [ 
... { 'name' : 'Barcelona' }, 
... { 'name' : 'Real Madrid' }, 
... { 'name' : 'Valencia' } 
... ] 
> Club.collection.insertMany(data, function(err,r) { 
...  assert.equal(null, err); 
...  assert.equal(3, r.insertedCount); 
... 
...  db.close(); 
... }) 

Und von der Mongo Shell überprüfen:

> db.clubs.find() 
{ "_id" : ObjectId("5574b464b680174d79e37601"), "name" : "Barcelona" } 
{ "_id" : ObjectId("5574b464b680174d79e37602"), "name" : "Real Madrid" } 
{ "_id" : ObjectId("5574b464b680174d79e37603"), "name" : "Valencia" } 
0

Manchmal Shell Skripte helfen kann:

for filename in *; do mongoimport -d mydb -c $filename --jsonArray done 

Siehe auch: MongoDB Bulk import using mongoimport from Windows folder

+0

Das Problem bei der Verwendung von Mongoimport war, dass wir nur unsere Daten über den Mungo-Adapter validiert haben und dies umgeht. Also mussten wir überprüfen, ob alle Felder in der JSON das richtige Format etc. hatten oder die Validierung in unser Mongodb-Schema einbauen. – IroNEDR

+0

Dieser Kommentar kann Ihrer Situation nicht helfen. :( – sstruct

Verwandte Themen