【发布时间】:2017-01-24 03:35:28
【问题描述】:
我正在开发一个需要更新嵌套数组的 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) 这是代码sn-p,解释如下:
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"
}
]
}]}
但我想要的正确格式是使用传感器阵列发布多个测量值,如下所示:
正确的 JSON 格式应该是:
{
"_id" : "Manasa",
"name" : "Manasa Sub",
"sensors" : [
{
"sensor_name" : "ras",
"_id" : ObjectId("57da0a4bf3884d1fb2234c74"),
"measurements" : [
{
"time" : "8:00"
}
],
"measurements" : [
{
"time" : "9:00"
}
]
}],
"__v" : 0 }
请就此提出一些想法。提前致谢。
【问题讨论】:
-
也许这个answer可以帮你找到路。
-
谢谢,但我可以更新单个值,我的问题是我尝试根据传感器名称将多个测量(数组)值更新到传感器阵列时失败了。跨度>
-
正如@Hayden 建议的那样,最好更改您的架构。您当前的架构实际上是无效的。对象内的键必须是唯一的。尝试在线 JSON 解析器,您会注意到错误。
标签: arrays json mongodb express mongoose