首页 > 解决方案 > Node.js - Mongodb - Mongoose / 无法将数组字符串传递到 $push feild

问题描述

所以我试图将每个数组的不同索引推送到 $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

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

有效的调用看起来像这样

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

一切都在数据库端工作,当通过此调用手动传递时,它可以工作。

标签: javascriptnode.jsdatabasemongodbmongoose

解决方案


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

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

推荐阅读