繁体   English   中英

MongoDB中的Node.js更新元素

[英]Node.js update element in 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是从接收到的数据中的套接字数组中提取的对象。

我只想更新第一个套接字的名称。 或者如果可能的话,我想将每个套接字的名称更新为收到的套接字数组。

但这似乎不起作用,但我没有收到任何错误。 有人可以指出我在做什么错吗?

将回调添加到update语句以查看错误跟踪。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM