Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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 nodejs+;Mongodb:按顺序插入到两个集合中会在第二秒内重复最后一个值_Node.js_Database_Mongodb - Fatal编程技术网

Node.js nodejs+;Mongodb:按顺序插入到两个集合中会在第二秒内重复最后一个值

Node.js nodejs+;Mongodb:按顺序插入到两个集合中会在第二秒内重复最后一个值,node.js,database,mongodb,Node.js,Database,Mongodb,我使用下面的代码插入MongoDB var tagData = JSON.parse(data); var allTags = tagData.tags; for (var j = 0; j < allTags.length; j++) { var p = allTags[j].tagId.toString(); for (var k = 0; k < loggerParams.length; k++) { var q = Object.keys(lo

我使用下面的代码插入MongoDB

var tagData = JSON.parse(data);
var allTags = tagData.tags;
for (var j = 0; j < allTags.length; j++) {
    var p = allTags[j].tagId.toString();
    for (var k = 0; k < loggerParams.length; k++) {
        var q = Object.keys(loggerParams[k]).toString();
        if (p === q) {
            // Prepare raw data tag
            var tagRawDoc = {};
            // Simple key-value assignment here
            // Document prepared; ready to insert into MongoDB
            database.addDocument('tagraw', tagRawDoc, function (err) {
                if (err) {
                    log.info(util.format('Error adding document to tagrawdatas. %s', err.message));
                    throw err;
                } else {
                    // Prepare history tag
                    var historyTagDoc = {};
                    historyTagDoc.tagNameAlias = tagRawDoc.tagNameAlias;
                    // Simple key-value assignment here
                    // Document prepared; ready to insert into MongoDB
                    database.addDocument('taghistory', historyTagDoc, function (err) {
                        if (err) {
                            log.info(util.format('Error adding document to tagrawdatas. %s', err.message));
                            throw err;
                        }
                    });
                }
            });
            // Match found; exit loop
            break;
        }
    }
}

这是因为您将一个/多个同步
for
和异步代码与
database.addDocument
混合在一起,这会导致nodejs中的功能范围出现问题

这类事情的一个简单例子:

for(var i = 0; i < 10; i++){
    setTimeout(() => console.log(i), 0);
}

这是因为您将一个/多个同步
for
和异步代码与
database.addDocument
混合在一起,这会导致nodejs中的功能范围出现问题

这类事情的一个简单例子:

for(var i = 0; i < 10; i++){
    setTimeout(() => console.log(i), 0);
}

由于此代码不使用下标,我猜,
allTags
中的每个条目现在都是
tag
,而
loggerParams
中的每个条目现在都是
loggerParam
。这是正确的吗?是的,我使用
数组获取
q
变量,而不是执行2循环。查找
以避免在无效值上异步循环。明白了。在准备
tagRawDoc
时,我确实是指
tag
loggerParam[q]
;但是,数据库中插入了
null
值。让我再调试一些…使用
tag
loggerParams[q]
,它应该可以解决您的问题。
loggerParams
是一个对象数组(我应该在前面提到)。因此,
q
将是一个我需要其值的对象。我尝试了
q[Object.keys(q)]
-测试了它(这里)[.但是,在运行时,我得到一个错误,如
TypeError:Cannot convert undefined或null to object
顺便说一句,匹配是有保证的。由于此代码不使用下标,我猜,
allTags
中的每个条目现在都是
tag
,而
loggerParams
中的每个条目现在都是
loggerParam
,这是正确的吗ct?是的,我没有做2次循环,而是使用
数组获取
q
变量。查找
以避免在无效值上异步循环。明白了。在准备
tagRawDoc
时,我确实指的是
tag
loggerParam[q]
;但是,数据库中插入了
null
值。让我再调试一些…使用
tag
loggerParams[q]
,它应该可以解决您的问题。
loggerParams
是一个对象数组(我应该在前面提到)因此,
q
将是一个我需要其值的对象。我尝试了
q[object.keys(q)]
-测试了它(这里)[。但是,在运行时,我得到了一个错误,因为
TypeError:无法将未定义或null转换为object
顺便说一句,匹配是有保证的。
var async = require('async');

var tagData = JSON.parse(data);
var allTags = tagData.tags;

async.each(allTags, function(tag, done){
    var p = tag.tagId.toString();
    var loggerParam = loggerParams.find(function(loggerParam){
        var q = Object.keys(loggerParam).toString();
        return p === q;
    });
    var tagRawDoc = {};
    // Simple key-value assignment here
    // Document prepared; ready to insert into MongoDB
    return database.addDocument('tagraw', tagRawDoc, function (err){
        if (err) return done(err);
        // Prepare history tag
        var historyTagDoc = {};
        historyTagDoc.tagNameAlias = tagRawDoc.tagNameAlias;
        // Simple key-value assignment here
        // Document prepared; ready to insert into MongoDB
        return database.addDocument('taghistory', historyTagDoc, done);
    });
}, (err) => {
    if(err) throw err;
    console.log('All done');
});