2015-10-22 4 views
0

У меня есть следующая схема 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 является объектом, который извлекается из массива сокетов в полученных данных.

Я хочу просто обновить имя первого сокета. или, если это возможно, я хочу обновить имя каждого сокета в качестве полученного массива сокетов.

Но это, похоже, не работает, но я не получаю ошибки. Может ли кто-нибудь указать, что я делаю неправильно?

+0

Код выглядит хорошо. Каковы значения объекта 'newData'? Можете ли вы изменить свой вопрос, чтобы показать некоторые примеры документов? – chridam

+0

Спасибо, я отредактировал мой вопрос !!! – user3649308

ответ

1

Добавить обратный вызов к оператору обновления, чтобы увидеть трассировку ошибки.

 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); 
    })