繁体   English   中英

猫鼬批量插入到子类别

[英]Mongoose batch insert to sub-category

我有一个数组,我想在mongodb中插入数据。

这是我当前的代码:

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')
  }
});

显然,这不符合我的意愿,因为循环完成后调用了newCountry.save(),所以它仅从最后一个区域插入信息。 实现将所有区域插入自己国家的最佳方法是什么?

附言:我只需要发生一次,因此内存使用,速度和其他类似的事情都没有关系。

要进行批量插入,您首先必须创建要插入的对象数组。 为此,您可以在foo数组上进行映射,然后一步插入此数组。 这是一些示例代码:

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.');
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM