所以我正在为我的最后一个项目创建一个社交媒体应用程序,里面有一个编码训练营。我们在后端使用MongoDB/Mongoose,当用户更改用户名和名/姓时,我无法更新用户的数据。他们的简介在更新,他们帖子里的名字在更新,但是他们对别人帖子的评论却没有更新。
猫鼬的布局是这样的。。。
有一个用户配置文件集合。每个用户集合都有一个Posts集合(如果存在)。每个帖子都有评论集(如果存在)。
当用户更改他们的名字和用户名时,我试图设置后端来更改他们所有帖子和评论中的数据(最终在所有通知中)。但挑战是用户也可以对其他人的帖子发表评论,所以我也需要在这些评论上改变他们的名字。
下面是代码的示例。。。
控制器:
update: function (req, res) {
db.User.findOneAndUpdate({ _id: req.params.id }, req.body, {
new: true,
})
.then(function (dbUser) {
//Updates posts from the user specified in params
//with new pic.
return db.Post.update(
{ _id: { $in: dbUser.posts } },
{
username: req.body.slug,
firstName: req.body.firstName,
lastName: req.body.lastName,
},
{ multi: true }
);
})
.then(function (req) {
db.Comment.update(
{ userId: req.body.userId },
{
$set: {
username: req.body.slug,
firstName: req.body.firstName,
lastName: req.body.lastName,
},
},
{ multi: true }
);
})
.then(dbModel => res.json(dbModel))
.catch(err => res.status(422).json(err));
模型(简化):
const userSchema = new Schema({
username: { type: String, required: true },
//username in lowercase
slug: { type: String, required: true },
firstName: { type: String, required: true },
lastName: { type: String, required: true },
posts: [
{
type: Schema.Types.ObjectId,
ref: 'Post',
},
],
notifications: [
{
type: Schema.Types.ObjectId,
ref: 'Notification',
},
],
})
const postSchema = new Schema({
userId: { type: String, required: true },
username: { type: String, required: true },
firstName: { type: String, required: true },
lastName: String,
postBody: { type: String, required: true },
createdAt: { type: Date, default: Date.now },
comments: [
{
type: Schema.Types.ObjectId,
ref: 'Comment',
},
],
});
const commentSchema = new Schema({
postId: { type: String, required: true },
username: { type: String, required: true },
commentBody: { type: String, required: true },
createdAt: { type: Date, default: Date.now },
firstName: { type: String, required: true },
lastName: String,
userId: { type: String, required: true },
originalPoster: { type: String, required: true },
});
我相信数据是从前端正确发送的,因为用户帖子更新正确,只是帖子中的评论不正确。由于注释是一个单独的集合,我想编写一个函数来扫描每个注释,如果userId=req.body.userId,则更新firstName,lastNa
您不需要存储“userId”、“username”、“firstName”和“lastName”字段,只需存储对用户的引用即可。这样,您甚至不需要扫描集合进行更新(这适用于帖子和评论),它只会关联回用户文档。您已经在模式中构建了关系,因此只需将相同的逻辑应用于用户即可!
告诉你吧。我想来这里把我的问题打出来会有帮助。
db.Comment.find({ userId: req.params.id })
.then(function (dbComment) {
return db.Comment.updateMany(
{ userId: req.params.id },
{
$set: {
username: req.body.slug,
firstName: req.body.firstName,
lastName: req.body.lastName,
},
},
{ multi: true }
);
})
问题内容: 我已经查看了网站上的一些问题,但还没有弄清楚我在做什么错。我有一些这样的代码: 我不确定在中间应该做什么以使其正确更新数据库。我已经尝试了很多东西,但是无法撤消以找出所有我尝试过的东西。我一整夜都花了时间,我希望它能正常工作。 这几乎是我想要的,我想知道是否有任何方法可以在条件部分 我会继续玩弄它。 问题答案: 这正是我想要的,只有一行。:D完美!
问题内容: 在将其他字段(例如位置,性别,雇主等)添加到用户个人资料时,是否应该在其中添加其他列并将其保存在其中?还是应该创建一个新表来保存用户个人资料信息? 另外,当用户上传个人资料图片时,是否应该将其保存在同一张表中?(请注意,这不是生产服务器,我只是在本地运行服务器上执行此操作以弄清楚问题)。谢谢 问题答案: 你必须为用户个人资料建立模型: 然后在中配置
问题内容: 有没有一种方法可以更新对象中的值? 假设我要为id = 2的项更新名称和值项; 我尝试了以下w /猫鼬: 这种方法的问题在于它会更新/设置整个对象,因此在这种情况下,我会丢失id字段。 猫鼬中是否有更好的方法来设置数组中的某些值,但不理会其他值? 我也只查询了这个人: 问题答案: 你近了 您应该在使用update运算符时使用点符号来做到这一点:
是否有方法更新对象中的值? 假设我想更新id=2的项目的名称和值项目; 我尝试过以下猫鼬: 这种方法的问题在于它更新/设置了整个对象,因此在本例中,我丢失了id字段。 在mongoose中有没有更好的方法来设置数组中的某些值,而不设置其他值? 我也问过只是人:
问题内容: 你好,我是python和django的新手,我需要一个获取当前用户配置文件的视图,我知道我应该使用User的get_profile,但我不知道如何使用它。我读了django文件,但并没有帮助我。这是我从doc中找到的: 问题答案: Django的文档说明了一切,尤其是存储有关用户的其他信息的部分。首先,您需要在字段中的某个位置定义一个模型,以获取用户的其他信息: models.py 然
问题内容: 我的文件 夹Folder 具有以下架构: 因此,对于每个页面,我可以拥有许多权限。在CMS中,有一个面板,其中列出了所有文件夹及其权限。管理员可以编辑一个权限并保存。 我可以很容易地用其权限数组保存整个 Folder 文档,其中只修改了一个权限。但是我不想保存所有文档(实际架构中包含更多字段),所以我这样做了: 但是问题是 烫发 总是 不确定的 !我试图以这种方式“静态地”获取许可: