2016-05-22 3 views
0

Ich habe ein Array und ich möchte die Daten in Mongodb einfügen.Mongoose Batch einfügen in die Unterkategorie

Das ist mein aktueller Code ist:

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/xyz') 

var countrySchema = mongoose.Schema({ 
    countryName { 
    countryCode: String, 
    Regions: { 
     regionName: { 
     regionCode: String 
     } 
    } 
    } 
}); 
// schema doesn't seem to matter. 
var Country = mongoose.model('Country', countrySchema) 

    var foo = [["Afghanistan","AF","Badakhshan~BDS|Badghis~BDG|Baghlan~BGL|Balkh~BAL|Bamyan~BAM|Daykundi~DAY|Farah~FRA|Faryab~FYB|Ghazni~GHA|Ghor~GHO|Helmand~HEL|Herat~HER|Jowzjan~JOW|Kabul~KAB|Kandahar~KAN|Kapisa~KAP|Khost~KHO|Kunar~KNR|Kunduz~KDZ|Laghman~LAG|Logar~LOW|Maidan Wardak~WAR|Nangarhar~NAN|Nimruz~NIM|Nuristan~NUR|Paktia~PIA|Paktika~PKA|Panjshir~PAN|Parwan~PAR|Samangan~SAM|Sar-e Pol~SAR|Takhar~TAK|Urozgan~ORU|Zabul~ZAB"]]; 
    // foo is just a small sample, it's only the first element of the complete array. 


var countriesArray = foo.map(function(value) { 
    var country = {}; 
    value[0] = value[0].replace(/\./gi, '') 
    value[1] = value[1].replace(/\./gi, '') 
    value[2] = value[2].replace(/\./gi, '') 

    country[value[0]] = { 
    countryCode: value[1], 
    Regions: {} 
    } 
    if (value[2].match(/\|/gi)) { 
    value[2].split('|').map(function(currentRegion) { 
     var regionSplit = currentRegion.split('~'); 
     country[value[0]].Regions[regionSplit[0]] = { 
     regionCode: regionSplit[1] 
     } 
    }) 
    } else if (value[2].match(/\~/gi)) { 
    var regionSplit = value[2].split('~'); 
    country[value[0]].Regions[regionSplit[0]] = { 
     regionCode: regionSplit[1] 
    } 
    } else { 
    country[value[0]].Regions[value[2]] = { 
     regionCode: 'Missing' 
    } 
    } 
    return country; 
}) 


Country.collection.insert(countriesArray, function(err, countriesArray) { 
    if (err) { 
    console.log(err) 
    } else { 
    console.log('Done') 
    } 
}); 

Offensichtlich ist dies nicht, wie ich es möchte funktioniert, fügt er nur die Informationen aus der letzten Region seit newCountry.save() aufgerufen wird, nachdem die Schleife beendet ist . Was wäre die beste Methode, um alle Regionen in ihre eigenen Länder einzufügen?

PS Ich brauche nur, dass dies einmal passiert, so Speicherverbrauch, Geschwindigkeit und andere Dinge wie das egal sind.

+1

Wenn Sie einen Batch-Einsatz suchen, wie beschrieben [hier] (http://stackoverflow.com/questions/16726330/mongoose-mongodb-batch-insert). – domyos

Antwort

1

Um einen Stapel einzufügen, müssen Sie zunächst ein Array von Objekten erstellen, die Sie einfügen möchten. Dazu können Sie eine Karte auf dem foo Array erstellen und dann dieses Array in einem Schritt einfügen. Hier einige Beispiel-Code:

var Country = mongoose.model('Country', countrySchema);  

var countries = foo.map(function(value) { 
    var country = {}; 
    // do something with your array. 
    return country; 
} 

Country.collection.insert(countries, function(err, countries) { 
    console.log('Inserted ', countries.length, ' documents.'); 
}); 
+0

Das hat uns sehr geholfen. – Trax