顺序输入没有正确输入数据库(MongoDB)for for condition条件下的各种对象

问题描述 投票:0回答:1

我有一个Array,在这个下面,有多个对象示例:

var array = [
              {'key': 'key4', 'value': 'value4'},
              {'key': 'key3', 'value': 'value3'},
              {'key': 'key2', 'value': 'value2'},
              {'key': 'key1', 'value': 'value1'}
             ];

我的自定义函数是这样的:

var updateOnCollection = function(primaryfilter, secondaryfilter){
        Test.update(primaryfilter, {$push: secondaryfilter}, function(error2, result){
            if (error2) {
                logger.log('error', 'Error');
                console.log(error2);
            } else {
                console.log(result);  
            }
        });
    };

我有一个自定义功能进行更新。所以只需传递密钥和值。因此,当我尝试更新查询时,查询不是以顺序方式完成的。我试图在for循环下运行更新查询

for(var i = 0; i< array.length; i++){
    //My Custom Function
    //Value.updater(array[i].key, array[i].value);
   var primaryfilter = {'id': 1};
   var secondaryfilter = {'Elementname' : {'key': array[i].name, 'value':array[i].value }};
   updateOnCollection(primaryfilter, secondaryfilter);
}

但是值会像这样存储在db上

{'key': 'key3', 'value': 'value3'},
 {'key': 'key4', 'value': 'value4'},
 {'key': 'key2', 'value': 'value2'},
 {'key': 'key1', 'value': 'value1'}

或者像这样的时间

{'key': 'key4', 'value': 'value4'},
{'key': 'key2', 'value': 'value2'},
{'key': 'key3', 'value': 'value3'},
{'key': 'key1', 'value': 'value1'}

我知道这是由于循环的某些原因而发生的。任何人都有更好的选择来应对这种情况

javascript mongodb
1个回答
0
投票

使用await。 (这仅适用于Node.js 7.6+)

var updateOnCollection = async function(primaryfilter, secondaryfilter){
    try { 
        // Test.update() should return promise
        // Normally, Node.js db adapters return promise.
        await Test.update(primaryfilter, {$push: secondaryfilter});
    }
    catch(err) {
        logger.log('error', 'Error');
        console.log(error2);
    }
    return Promise.resolve();
}

在你的loop

for(var i = 0; i< array.length; i++){
      //My Custom Function
      //Value.updater(array[i].key, array[i].value);
      var primaryfilter = {'id': 1};
      var secondaryfilter = {'Elementname' : {'key': array[i].name, 'value':array[i].value }};
      await updateOnCollection(primaryfilter, secondaryfilter);
  }

async前缀添加到function上执行的loopt。

© www.soinside.com 2019 - 2024. All rights reserved.