Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js MongoSkin错误插入_Node.js_Mongodb_Mongoskin - Fatal编程技术网

Node.js MongoSkin错误插入

Node.js MongoSkin错误插入,node.js,mongodb,mongoskin,Node.js,Mongodb,Mongoskin,我有一个具有以下结构的国家阵列: { "code": "ZW", "name": "Zimbabwe", "zipPattern": "[\\s\\S]*", "states": [ { "name": "Bulawayo" }, { "name": "Harare" }, { "name": "Manicalan

我有一个具有以下结构的国家阵列:

{
    "code": "ZW",
    "name": "Zimbabwe",
    "zipPattern": "[\\s\\S]*",
    "states": [
        {
            "name": "Bulawayo"
        },
        {
            "name": "Harare"
        },
        {
            "name": "Manicaland"
        },
        {
            "name": "Mashonaland Central"
        },
        {
            "name": "Mashonaland East"
        },
        {
            "name": "Mashonaland West"
        },
        {
            "name": "Masvingo"
        },
        {
            "name": "Matabeleland North"
        },
        {
            "name": "Matabeleland South"
        },
        {
            "name": "Midlands"
        }
    ]
}
我正在尝试使用带有以下代码的
MongoSkin
将它们插入
MongoDb

var countries = require('./mongo/ready/Countries');
db.collection('countries').find().toArray(function (err, result) {
  if (result.length === 0) {
    for (var i = 0; i < countries.length; i++) {
        var obj = countries[i];
        var states = obj.states;
        db.collection('countries').insert({
            name: obj.name,
            code: obj.code,
            zipPattern: obj.zipPattern
        }, function (error, countryResult) {
            var id = countryResult[0]._id;

            for (var j = 0; j < states.length; j++) {
                var state = states[j];
                db.collection('states').insert({
                    countryId: id,
                    name: state.name
                }, function (stateError, stateResult) {
                    if (stateError) console.log(stateError);
                     console.log(stateResult);
                });
            }
        });
    }
  }
});
var-countries=require('./mongo/ready/countries');
db.collection('countries').find().toArray(函数(err,result){
如果(result.length==0){
对于(变量i=0;i

但是代码为数组中的每个国家插入数组中最后一个国家(津巴布韦)的州,而不是正确的州。如何修复它?

通常我们不在同步循环(简单for循环)之间使用异步查询(插入)。它给我们带来了异常的结果。节点提供异步循环以克服此问题

首先,这需要异步模块

var async = require('async');
现在,您可以使用以下代码插入国家及其各自的州

async.each(countries, function(obj, callback) {

    var states = obj.states;
    db.collection('countries').insert({
        name: obj.name,
        code: obj.code,
        zipPattern: obj.zipPattern
    }, function(error, countryResult) {
        if (error) {
            callback(error);
        } else {
            var id = countryResult[0]._id;
            async.each(states, function(state, callback) {
                db.collection('states').insert({
                    countryId: id,
                    name: state.name
                }, function(stateError, stateResult) {
                    if (stateError) {
                        callback(stateError);
                    } else {
                        callback();
                    }

                });
            });
            callback();
        }
    }); }, function(err) {
    if (err) {
        // handle error here
    } else {
       // do stuff on completion of insertion
    } });
谢谢