Node.js-Mongodb-猫鼬/无法将数组字符串传递到$ push领域

时间:2019-11-24 20:22:06

标签: javascript node.js database mongodb mongoose

因此,我试图将每个数组的不同索引推入$ push调用中以填充mongodb服务器,但是我无法将调用特定于要访问的数组

在数据库中需要为IP地址和数组名称设置一个初始数组

//Team IP Info
var teamIps = [
    '8.8.8.8',
    '8.8.8.9',
    '8.8.8.8',
    '8.8.8.8',
    '8.8.8.8',
]
var boxNames = [
    'Linux1',
    'Linux2',
    'Windows1',
    'Windows2',
    '98',
]

这是$ push调用的代码

for (let index = 0; index < teamIps.length; index++) {
    var hostIn = teamIps[index];
    const boxName = boxNames[index];
    const liTest = 'services.0.ICMP_Linux1'
    var db_base = 'services.0.ICMP_';
    var db_index = db_base.concat(boxName);
    console.log('Inital : ' + boxName)

    //This should work and makes life easier but I cant append the db_index string into the mongoose push call

    var result = await session.pingHost(hostIn, function (error, hostIn, sent, rcvd) {
        var ms = rcvd - sent;
        var db_base = 'services.0.ICMP_';
        var db_index = db_base.concat(boxName).toString();
        console.log(typeof db_index)
        if (error){
            var output = hostIn + ": " + error.toString()
            Team.findOneAndUpdate(
                { name: name }, 
                {$push: {db_index :{ timeStamp: epochTime , status: false , error: error.toString()} }},
                function(err,suc){
                    if(err){
                        console.log(err)
                    }
                    else{
                        console.log(hostIn + ' : ' + db_index + " : " + output)
                    }
                });
            // res.send({
            //     result: output
            // })
        }
        else{
            var output = hostIn + ": Alive (ms=" + ms + ")"
            Team.findOneAndUpdate(
                { name: name }, 
                {$push: {db_index :{ timeStamp: epochTime , status: true , speed: ms} }},
                function(err,suc){
                    if(err){
                        console.log(err)
                    }else{
                        console.log(hostIn + ' : ' + db_index + " : " + output)
                    }
                });
            // res.send({
            //     result: output
            // })
        }
    });

在此次通话中

{$push: {db_index :{ timeStamp: epochTime , status: false , error: error.toString()} 

我希望能够将db_index更改为数组中的每个db_index,但是它始终默认为实际单词db_index

我似乎无法弄清楚如何在不失败的情况下将字符串传递给此调用

有效的呼叫如下所示

{$push: {'services.0.ICMP_Linux1':{ timeStamp: epochTime , status: false , error: error.toString()} }},

一切正常,在数据库端都有效,并且在此调用中手动传递时有效。

1 个答案:

答案 0 :(得分:1)

您可以使用计算出的属性名称:

{$push: {[db_index] :{ timeStamp: epochTime , status: false , error: error.toString()} } }