javascript - Node.js 更新 MongoDB 中的元素

标签 javascript node.js mongodb

我有以下 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/

相关文章:

javascript - 两个对象之间的匹配 ID 问题

mongodb - 在 MongoDB 中,你如何查询只包含某些字段而不包含其他字段的记录

node.js - Mongoose:从现有数据生成模式

javascript - 需要使用 fadeinDown 和 fadeOutDown 效果对单词进行动画处理

javascript - 如何删除谷歌地图上绘制的多边形

javascript - 自动播放 youtube 和 soundcloud 嵌入一个接一个

javascript - Rails 远程表单多次提交,错误为 'enter'

javascript - 如何将 Web Audio API 连接到 Tone.js?

javascript - 获取用户的公会昵称

node.js - 无法从数组 $pull