gpt4 book ai didi

arrays - 更新嵌套数组 Mongoose

转载 作者:IT老高 更新时间:2023-10-28 13:33:46 27 4
gpt4 key购买 nike

我正在开发一个需要更新嵌套数组的 express js 应用程序。1) 架构:

//Creating a mongoose schema
var userSchema = mongoose.Schema({
_id: {type: String, required:true},
name: String,
sensors: [{
sensor_name: {type: String, required:true},
measurements: [{time: String}]
}] });

2)这是代码片段和解释如下:

router.route('/sensors_update/:_id/:sensor_name/')
.post(function (req, res) {
User.findOneAndUpdate({_id:req.body._id}, {$push: {"sensors" :
{"sensor_name" : req.body.sensor_name , "measurements.0.time": req.body.time } } },
{new:true},function(err, newSensor) {
if (err)
res.send(err);
res.send(newSensor)
}); });

我能够使用带有推送技术的 findOneAndUpdate 成功将值更新到测量数组,但是当我尝试将多个测量添加到传感器数组时失败了。

这是当我向传感器阵列发布第二次测量时得到的当前 json:

{
"_id": "Manasa",
"name": "Manasa Sub",
"__v": 0,
"sensors": [
{
"sensor_name": "ras",
"_id": "57da0a4bf3884d1fb2234c74",
"measurements": [
{
"time": "8:00"
}
]
},
{
"sensor_name": "ras",
"_id": "57da0a68f3884d1fb2234c75",
"measurements": [
{
"time": "9:00"
}
]
}]}

但我想要的正确格式是使用传感器阵列发布多个测量值,如下所示:

enter image description here

正确的 JSON 格式应该是:

 {
"_id" : "Manasa",
"name" : "Manasa Sub",
"sensors" : [
{
"sensor_name" : "ras",
"_id" : ObjectId("57da0a4bf3884d1fb2234c74"),
"measurements" : [
{
"time" : "8:00"
}
],
"measurements" : [
{
"time" : "9:00"
}
]
}],
"__v" : 0 }

请就此提出一些想法。提前致谢。

最佳答案

您可能需要重新考虑您的数据模型。就目前而言,你无法完成你想要的。传感器字段是指一个阵列。在您提供的理想文档格式中,该数组中有一个对象。然后在该对象内部,您有两个具有完全相同键的字段。在 JSON 对象或此上下文中的 mongo 文档中,同一对象中不能有重复的键。

目前尚不清楚您要在这里寻找什么,但也许最好选择这样的东西:

{
"_id" : "Manasa",
"name" : "Manasa Sub",
"sensors" : [
{
"sensor_name" : "ras",
"_id" : ObjectId("57da0a4bf3884d1fb2234c74"),
"measurements" : [
{
"time" : "8:00"
},
{
"time" : "9:00"
}
]
},
{
// next sensor in the sensors array with similar format
"_id": "",
"name": "",
"measurements": []
}],
}

如果这是你想要的,那么你可以试试这个:

User.findOneAndUpdate(
{ _id:req.body._id "sensors.sensor_name": req.body.sensor_name },
{ $push: { "sensors.0.measurements": { "time": req.body.time } } }
);

附带说明,如果您只想在测量数组中的每个对象中存储一个字符串,您可能只想存储实际值而不是整个对象 { time: "值”}。您可能会发现以这种方式处理数据更容易。

关于arrays - 更新嵌套数组 Mongoose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39522455/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com