首页 > 解决方案 > MongoError:无法将 $addToSet 应用于非数组字段。名为“trackTime”的字段具有非数组类型字符串

问题描述

在这里,我正在尝试使用userid, trackTime字段进行更新。Evertime 用户 ID 和 trackTime 会有所不同,所以我正在使用$addToSet,但在这里我遇到了一个错误

像这样我在邮递员中传递数据:-

{
 "courseId":"61001184afeacb22ac1668e0",
 "userId":"60f6fe96a1a44a1fb4a59573",
 "trackingTime":"4"
}

这是架构:-

 usersEnrolled : [{
    iscourseenrolled : { type:Boolean, default: false },
    userId: {type: String },
    trackTime: {type:String}
 }],

代码:-

const updatedTrackTime = await Courses.updateOne({ "_id" : req.body.courseId},{
  $addToSet:{
    "usersEnrolled.0.userId" : req.body.userId,
    "usersEnrolled.0.trackTime": req.body.trackingTime 
 }})

标签: node.jsmongodb

解决方案


该错误的原因可能是因为您没有指定数组字段(实际上您根本没有指定任何字段)。尝试usersEnrolled像这样添加您的字段:

const updatedTrackTime = await Courses.updateOne({ "_id" : req.body.courseId},{
  $addToSet:{
    usersEnrolled: {
      "usersEnrolled.0.userId" : req.body.userId,
      "usersEnrolled.0.trackTime": req.body.trackingTime
    }
 }});

要获取有关$addToSet使用 MongoDB 手册 的更多详细信息https://docs.mongodb.com/manual/reference/operator/update/addToSet/


推荐阅读