首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoSkin错误插入

MongoSkin错误插入
EN

Stack Overflow用户
提问于 2015-03-16 11:40:28
回答 1查看 54关注 0票数 1

我与具有以下结构的国家有一个数组:

代码语言:javascript
复制
{
    "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"
        }
    ]
}

我试图使用下面的代码使用MongoDb将它们插入到MongoSkin

代码语言:javascript
复制
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);
                });
            }
        });
    }
  }
});

但是代码在数组中插入最后一个国家的状态(津巴布韦),用于数组中的每个国家而不是正确的状态。我怎么才能修好它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-18 11:23:19

通常,我们不使用同步循环(simple for循环)之间的异步查询(Insert)。它给了我们异常的结果。节点提供异步循环来克服这一问题。

首先,需要异步模块。

代码语言:javascript
复制
var async = require('async');

现在,您可以使用以下代码插入国家及其各自的州

代码语言:javascript
复制
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
    } });

谢谢

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29075919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档