У меня есть следующая схема Mongoose и модель:Node.js обновление элемента в MongoDB
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 является объектом, который извлекается из массива сокетов в полученных данных.
Я хочу просто обновить имя первого сокета. или, если это возможно, я хочу обновить имя каждого сокета в качестве полученного массива сокетов.
Но это, похоже, не работает, но я не получаю ошибки. Может ли кто-нибудь указать, что я делаю неправильно?
Код выглядит хорошо. Каковы значения объекта 'newData'? Можете ли вы изменить свой вопрос, чтобы показать некоторые примеры документов? – chridam
Спасибо, я отредактировал мой вопрос !!! – user3649308