我有一个简单的注册/登录应用程序,它基本上是一个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