因此,我试图将每个数组的不同索引推入$ 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()} }},
一切正常,在数据库端都有效,并且在此调用中手动传递时有效。
答案 0 :(得分:1)
您可以使用计算出的属性名称:
{$push: {[db_index] :{ timeStamp: epochTime , status: false , error: error.toString()} } }