当前位置: 首页 > 知识库问答 >
问题:

在猫鼬中更新个人资料用户名,然后在他们的帖子和评论中更新用户名和数据

宰父子安
2023-03-14

所以我正在为我的最后一个项目创建一个社交媒体应用程序,里面有一个编码训练营。我们在后端使用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

共有2个答案

司国源
2023-03-14

您不需要存储“userId”、“username”、“firstName”和“lastName”字段,只需存储对用户的引用即可。这样,您甚至不需要扫描集合进行更新(这适用于帖子和评论),它只会关联回用户文档。您已经在模式中构建了关系,因此只需将相同的逻辑应用于用户即可!

裴威
2023-03-14

告诉你吧。我想来这里把我的问题打出来会有帮助。

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 文档,其中只修改了一个权限。但是我不想保存所有文档(实际架构中包含更多字段),所以我这样做了: 但是问题是 烫发 总是 不确定的 !我试图以这种方式“静态地”获取许可: