我有一個簡單的註冊/登錄應用程序,它基本上是一個coursera/udemy類型,其中應用程序列出特定課程,用戶可以喜歡它們或註冊它們。我一直在嘗試使用mongodb函數來更新數據庫中的用戶,並且因爲用戶可以喜歡所需的課程來更新所有課程(課程有一個「usersLiked」字段,它是一個數組並且保留所有具有喜歡它)。通過更改數組中的對象更新MongoDB中的多個文檔
課程結構如下:
{
"_id" : ObjectId("5977662564aac9f6c8d48884"),
"title" : "Title",
"lecturer" : "Lecturer",
"length" : 30,
"coverPhoto" : "Photo",
"usersLiked": [
{
"_id" : ObjectId("597763e346a7a463cbb8f529"),
"fullname" : "Name",
"username" : "Username",
"password" : "Hash",
"city" : "City",
"street" : "Street",
"website" : "Website"
}
],
"lectures" : [
{
"title" : "Introduction",
"number" : 1,
"url" : "someURL"
}
]
}
而且用戶結構:
{
"_id" : ObjectId("597763e346a7a463cbb8f529"),
"fullname" : "Name",
"username" : "Username",
"password" : "Hash",
"enrolledCourses" : [
...
]
}
],
"city" : "City",
"street" : "Street",
"website" : "Website"
}
所以現在當我想改變我調用這個函數。它改變了userCollection,但在courseCollection中它什麼都不做,而它應該獲得所有課程,並且如果其中一些在「usersLiked」數組中有一個帶有用戶名(用戶的用戶名)的對象,它也應該修改那裏的用戶。
const updateUser = (username, details) => {
usersCollection
.update({
username: username,
}, {
$set: {
fullname: details.fullname,
city: details.city,
street: details.street,
website: details.website,
},
});
coursesCollection
.updateMany(
{
usersLiked: {
$elemMatch: {
username: username,
},
},
},
{
$set: {
'usersLiked.username': details.username,
'usersLiked.city': details.city,
'usersLiked.street': details.street,
'usersLiked.website': details.website,
},
}
);
};
但通過這樣做,我改變了所有喜歡該課程的用戶。而這仍然無法正常工作。 – nivalen292
set操作僅適用於與$ elemMatch子句匹配的文檔中usersLiked數組中的第一個元素。 $ elemMatch關注於單個用戶,因此設置操作不會更改所有喜歡該課程的用戶。 – glytching
我看到了,但仍然不會更改數據庫中的文檔。 – nivalen292