我有以下 Mongoose 架构和模型:
var deviceSchema = new Schema({
deviceId:String,
deviceName:String,
devicePlace:String,
socket : [{number: Number,name:String, state : Boolean, current: Number, image:Number,locked:Boolean,reserved:Boolean}]
});
我的数据库中已经有一个带有四个套接字的设备。
这里是例子!
这是原始数据。
{
"_id" : ObjectId("5626569006bc3da468bafe93"),
"deviceId" : "0013A20040B5769A",
"deviceName" : "device",
"devicePlace" : "place",
"__v" : 0,
"socket" : [
{
"_id" : ObjectId("5628bd83570be84e28879e2d"),
"number" : 0,
"name" : "name"
"state" : true,
"current" : 0
"image" : 0,
"locked" : false,
"reserved" : false,
}, ...
]
}
我收到了来自客户端的数据以供更新。
{
"_id" : ObjectId("5626569006bc3da468bafe93"),
"deviceId" : "0013A20040B5769A",
"__v" : 0,
"socket" : [
{
"_id" : ObjectId("5628bd83570be84e28879e2d"),
"number" : 0,
"name" : "new name!!!!!"
"state" : true,
"current" : 0
}, ...
]
}
现在我尝试使用以下命令更新数据库中的特定套接字名称:
device.update({deviceId: newData.deviceId, "socket.number": newData.number}, {$set: {"socket.$.name": newData.name}})
newData 是从接收到的数据中的套接字数组中提取的对象。
我只想更新第一个套接字的名称。 或者如果可能的话,我想将每个套接字的名称更新为接收到的套接字数组。
但这似乎不起作用,但我没有收到任何错误。有人可以指出我做错了什么吗?
最佳答案
将回调添加到更新语句以查看错误跟踪。
device.update({deviceId:newData.deviceId,'socket.number':newData.number}
,{$set: {"socket.$.name" : newData.name}}
,function(error,updatedDevice){
if(error) throw error;
// or : console.log("update error",error.message);
})
关于javascript - Node.js 更新 MongoDB 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33279173/