如何更新嵌套数组MongoDb Node js中的必填字段[重复]

Posted

技术标签:

【中文标题】如何更新嵌套数组MongoDb Node js中的必填字段[重复]【英文标题】:How can I update required field in nested array MongoDb Node js [duplicate] 【发布时间】:2019-06-04 09:03:50 【问题描述】:

如何查找和更新数据数组中的字段

    "_id" : ObjectId("5bfe6df9777d13255bb2ad7c"),
    "program_id" : ObjectId("5b7bcc8520a2b13177b4d92e"),
    "week_id" : "2018.10.48",
    "month" : 10.0,
    "week_count" : 48.0,
    "year" : 2018.0,
    "data" : [ 
        
            "_id" : ObjectId("5bfe6df9c1e35824dfcce39f"),
            "date" : 27.0,
            "user_ids" : [ 
                
                    "checkin_time" : 1543400937337.0,
                    "by" : ObjectId("5bb2aa12460b5f2ef97388e6"),
                    "checkin_by" : ObjectId("5bf7dd8387550226071eda5c"),
                    "checkin_status" : 1.0,
                    "point" : 1.0
                , 
                
                    "checkin_time" : 1543400937337.0,
                    "by" : ObjectId("5bb453b44817792ec972c1ab"),
                    "checkin_by" : ObjectId("5be7dd8387550226071eda5c"),
                    "user_utc_checkin_time" : 1543401130940.0,
                    "user_time_zone" : "Asia/Kolkata",
                    "checkin_status" : 1.0,
                    "point" : 1.0
                , 
                
                    "checkin_time" : 1543400937337.0,
                    "by" : ObjectId("5bed113bcd1c075e045aa79e"),
                    "checkin_by" : ObjectId("5bed113bcd1c075e045aa79e"),
                    "user_utc_checkin_time" : 1543401594869.0,
                    "user_time_zone" : "Asia/Kolkata",
                    "checkin_status" : 1.0,
                    "point" : 1.0
                
            ]
        
    ]

我正在使用

db.collectionName.findAndUpdate(
     "data.user_ids.checkin_by":mongoose.Types.ObjectId(a) ,  
      $set :
         "data.user_ids.$.checkin_status":2 
     
   )

【问题讨论】:

【参考方案1】:

试试这个:

db.collectionName.update(
"data.user_ids.checkin_by":mongoose.Types.ObjectId(a) ,
"$set":"data.user_ids.$.checkin_status":2 
)

【讨论】:

不,它不工作 使用这段代码会发生什么? "msg": "internal Server Error", "err": "name": "MongoError", "message": "不能使用部分(data.user_ids.0.checkin_status的数据) 遍历元素 (data: [ date: \"\", user_ids: ... 这对我有用 CheckInDao.findAndUpdate( $and:[ "_id":mongoose.Types.ObjectId("5c3635b00f62312e2412e124"), "data.0.user_ids.checkin_by": mongoose.Types.ObjectId("5c002ac43716336b67bd7726") ], // , $set : "data.0.user_ids.$.checkin_status":11 );但我仍然不能说服,因为我必须使用 data.o.user_ids 尝试在数据后使用 $ 而不是 0

以上是关于如何更新嵌套数组MongoDb Node js中的必填字段[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mongodb 和 node js 更新和拉取用户

Node.js 中 mongodb 数组的嵌套循环

如何使用node.js中的循环将表单数据保存为对象和对象数组到mongodb?

更新 mongodb 中的嵌套数组

MongoDB - 基于嵌套数组的字段值更新数组对象中的字段

如何使用 Node.js 和 Mongoose 将对象添加到嵌套数组