我有点使用MongoDB
的初学者,并完成了将新值推向数据库的任务,但只有将其作为数组制成数组的值,事实是当前查询将所有内容重复,值和键重复,这是示例:
"battery_message" : [
{
"ChargerState" : null
},
{
"ChargerStatus" : null
},
{
"OutputVoltage" : null
},
{
"timestamp" : 1561442271.976242
},
{
"ChargerState" : null
},
{
"ChargerStatus" : null
},
{
"OutputVoltage" : null
},
{
"timestamp" : 1561442302.637065
}
],
问题是,电池消息可能会出现一些新日期,因此在我的模式中看起来像这样:
battery_message: Array
这是我的查询:
deviceControllers.updateDevice(
{device_id: message.device_id},
{$push: { battery_message: [
{ChargerState: message.data.ChargerState},
{ChargerStatus: message.data.ChargerStatus},
{OutputVoltage: message.data.OutputVoltage},
{timestamp: message.data.timestamp},
]}}
)
基本上,这个想法是在以后进行,例如电角:[value, value, value, etc.]
您可以使用$ addtoset和$ $每个来更新现有数组。这里$addToSet
操作员adds
或appends
数组的值,只有在数组中不存在值时。
所以,您的查询可能看起来像:
deviceControllers.updateDevice(
{device_id: message.device_id},
{$addToSet: { battery_message:
{
$each: [
message.data.ChargerState,
message.data.ChargerStatus,
message.data.OutputVoltage,
message.data.timestamp
]
}}})
更新1 如果
battery_message
具有:ChargerState:Array,ChargerStatus:Array,OutputVoltage:Array,timeStamp:Array
deviceControllers.updateDevice(
{device_id: message.device_id},
{$addToSet: {
battery_message.ChargerState:{$each:[value1,value2,,,,]},
battery_message.ChargerStatus:{$each:[value1,value2,,,,]},
battery_message.OutputVoltage:{$each:[value1,value2,,,,]},
battery_message.timestamp:{$each:[value1,value2,,,,]}
}
})
在这里,如果键Ex:battery_message.ChargerState
不存在,它将被创建。
注意:
- 只需确保键
battery_message
是object
而不是array
,如果键是单独的单个密钥而不是嵌套键,请从命令中删除battery_message
键。 - 如果仅必须将单个条目附加到数组中,则比您的查询看起来像:
$addToSet:{battery_message.ChargerState: message.data.ChargerState}