簡體   English   中英

無法遍歷 mongodb 數組

[英]Can't iterate over mongodb array

我們正在通過'_id'在數據庫中尋找用戶

   "_id": "6381e7c6bf8892cf05c7c798",
    "username": "Teacher",
    "email": "teacher@gmail.com",
    "role": "teacher",
    "avatar": "fixtures/teacher.jpg",
    "token": "KNuSF7sscU3EJsMetUFKi",
    "authentication": true,
    "myCourses"

有必要使用'aggregate'從數組中獲取合適的 object ,我們通過'course'字段找到它並更改其中的'status'

   "myCourses": [
        {
            "course": "6381e7c6bf8892cf05c7c7b3",
            "status": true,
            "_id": "6381e80f12d633b2e6c35fbd"
        },
        {
            "course": "6381edab4f212193837ab575",
            "status": true,
            "_id": "6381edc54f212193837ab57c"
        }
    ],

我嘗試了以下方法

const test = await User.find({ _id: userId, myCourses: {$elemMatch: {course: courseId}} })
const test = await User.find(userId, { courseId: {$in : myCourses} })
const updateCourseStatus = user.myCourses.find(elem => elem.course.toString() === courseId)

最后一種方法有效,但我認為它不正確

如果您想在 myCourses 中更新課程狀態。 _id過濾文檔, courseId要更新的課程。 使用指針運算符$在指向的 object 屬性中設置值。 在此處閱讀文檔

User.update({
  _id: userId,
  "myCourses.course": courseId
},
{
  $set: {
    "myCourses.$.status": newStatus
  }
})

試用樣品
例子

使用"arrayFilters" ”給定"myCourses.course"更改"status"的另一種選擇是:

db.user.update({
  "_id": userId
},
{
  "$set": {
    "myCourses.$[elem].status": newStatus
  }
},
{
  "arrayFilters": [
    {
      "elem.course": courseId
    }
  ]
})

mongoplayground.net上試用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM