【问题标题】:How to populate objects in mongoose如何在猫鼬中填充对象
【发布时间】:2018-03-18 02:32:51
【问题描述】:

我想要做的是一个单一的待办事项应用程序,您可以在其中创建用户并使用该用户登录。每个用户都可以对单个待办事项进行 CRUD,并且可以获取链接到该特定用户的所有待办事项。 这是 userSchema 的架构

const userSchema = new Schema({
firstName:{type:String,trim:true},
lastName:{type:String,trim:true},
userName:{type:String,required:true,unique:true,sparse:true,trim:true},
email:{type:String,required:true,unique:true,sparse:true,trim:true},
phoneNumber:{type:String,unique:true,sparse:true,required:true},
hash:{type:String,required:true}
})

我有 todoSchema

 author:{type: Schema.Types.ObjectId},
title:{type:String, required:true, trim:true},
context:{type:String, trim:true,},
isFinished:{type:Boolean,required:true,default: false},
finishedAt:{type:Date}

我也有与 JWT 一起使用的登录系统,我的问题是如何使用当前登录的用户的 id 保存 todo。以及如何获取链接到该用户的所有 todo当前登录 我不希望 todos 以数组的形式存储在 userSchema 中,而是作为不同的模式存储,您可以在其中为每个 todo 执行 CRUD - 我正在阅读猫鼬附带的名为 populate 的东西,但我不知道如何实现它 --如果你能给我一些想法如何做到这一点,那就太好了。我不需要完整的实现。谢谢

-如果你需要更多的代码,这里是https://github.com/jkuzmanovik/todoApi

【问题讨论】:

    标签: node.js mongodb mongoose populate


    【解决方案1】:

    一旦用户登录(我猜你正在使用护照)护照创建 req.user 可以。 req.user 将包含在创建护照插件时用户架构中给出的所有详细信息。

    这可用于填充您的 toDo 架构,如下所示:

    在你做的获取请求中

    toDo.find({}) .populate('author') ...

    但如果您的目标是查找用户的所有待办事项,您可以执行以下操作

    toDo.find({author:req.user._id})
    

    这只能在身份验证后完成。 这将为您提供用户的所有待办事项。

    PS:一旦您填充了用户对象本身,只有作者字段将被替换(不是正确的词,但可以理解),它对过滤没有帮助。猫鼬种群应谨慎使用,因为它需要大量数据库资源并且会降低服务器性能。

    关于 JWT,每当您提出请求时,您都需要将 JWT 传递给服务器(通过 URL、授权标头等)。有一种名为 extract 的方法可以从 JWT 令牌中提取用户,从而可以进行身份​​验证。 阅读有关 passport-jwt 和 jsonwebtoken 的文档的更多信息。

    【讨论】:

      猜你喜欢
      • 2014-07-24
      • 2023-03-16
      • 1970-01-01
      • 2013-01-13
      • 2021-08-16
      • 1970-01-01
      • 2015-05-29
      • 2016-08-17
      相关资源
      最近更新 更多