mongodb 更改mongoose中数组内对象的字段

1sbrub3j  于 2022-11-22  发布在  Go
关注(0)|答案(1)|浏览(267)

我的应用程序跟踪学生注册不同的课程。
架构为:

const userSchema = new mongoose.Schema({

    username: String,
    password: Number,
    enrollment: []

})

注册数组如下所示:

[{courseName: somename, courseTime:sometime},{courseName: somename2, courseTime:sometime2}]

学生可以提供他是否在特定日期参加课程会议的信息。
所以我想做的是
a)找到特定学生B)找到该学生的特定课程c)向包含该课程的对象添加包含日期字段和是/否字段的附加对象。
所以我不会它看起来像这样:

[{courseName: somename, courseTime:sometime, newObject:{date:someDate, attendance:true}},{courseName: somename2, courseTime:sometime2,newObject:{date:someDate2, attendance:false}}]

我发现类似的问题在这样的主题:update Object inside array of Object with mongooseupdate Object inside array of Object with mongoose
这看起来不是一个很难的任务,但问题是我可能遗漏了一些简单的语法规则,因为当我在VScode中输入这段代码时,我看到了这样的图片:

任何帮助都将不胜感激

t2a7ltrp

t2a7ltrp1#

这里有一种方法可以把update加上"newObject"

db.collection.update({
  "username": "john1234" // from req.body.username
},
{
  "$set": {
    "enrollment.$[course].newObject": {
      // from req.body.xxx
      "date": ISODate("2022-12-01T09:00:00Z"),
      "attendance": true
    }
  }
},
{
  "arrayFilters": [
    { // from req.body.courseName
      "course.courseName": "NIE-SW101"
    }
  ]
})

输出示例:

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "enrollment": [
      {
        "courseName": "NIE-SW101",
        "courseTime": ISODate("2022-12-01T09:00:00Z"),
        "newObject": {
          "attendance": true,
          "date": ISODate("2022-12-01T09:00:00Z")
        }
      },
      {
        "courseName": "NIE-HI101",
        "courseTime": ISODate("2022-12-05T15:00:00Z")
      }
    ],
    "password": 1234,
    "username": "john1234"
  }
]

mongoplayground.net上试试。

相关问题