Node.js - Mongodb - Mongoose / 无法将数组字符串传递到 $push feild

Posted

技术标签:

【中文标题】Node.js - Mongodb - Mongoose / 无法将数组字符串传递到 $push feild【英文标题】:Node.js - Mongodb - Mongoose / Can't pass Array string into $push feild 【发布时间】:2020-03-20 03:57:49 【问题描述】:

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

一切都在数据库端工作,当通过这个调用手动传递时它工作正常。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

谢谢,这是我搜索文档数小时但找不到的解决方案。只需括号 [ ] -_-

以上是关于Node.js - Mongodb - Mongoose / 无法将数组字符串传递到 $push feild的主要内容,如果未能解决你的问题,请参考以下文章

JSONP 支持 node.js 和 mongo

夺命雷公狗---node.js---19之项目的构建在node+express+mongo的博客项目4mongodb在项目中的基本引入

Node.js 和 MongoDB,重用 DB 对象

node.js操作mongoDB数据库

node.js如何配置mongodb连接池?

夺命雷公狗---node.js---20之项目的构建在node+express+mongo的博客项目5mongodb在项目中实现添加数据