根据登录用户的 ObjectID 从 Mongo 获取数据
Posted
技术标签:
【中文标题】根据登录用户的 ObjectID 从 Mongo 获取数据【英文标题】:Fetching data from Mongo based on ObjectID on logged in user 【发布时间】:2021-02-28 17:55:05 【问题描述】:我的 Mongo DB 中有两个集合,如下所示:
文档
用户:
id: ObjectId ("5fb39e3d11eaad3e30cfb1b0")
userName: "Tobias"
password: "yyy"
id: ObjectId ("5fb3c83fb774ff3340482250")
userName: "Thor"
password: "xxx"
课程:
id: ObjectId ("5fb3cf3da8227e101826e2db")
CourseName: "Design"
userId: "5fb39e3d11eaad3e30cfb1b0" (THIS IS THE SAME AS THE OBJECT ID FOR THE FIRST USER)
当用户登录时,用户可以添加课程,登录用户的对象 ID 将与课程名称一起添加到 MongoDB 的集合中(就像上面的示例一样)。
我的问题是,如何只显示与登录用户匹配的课程?我使用 mongoose 进行用户登录,express 用于服务器连接,ejs 用于查看,VueJS 用于控制。
我来自关系数据库,所以不确定我在这里尝试加入 objectID 的方法是否是好的做法。
【问题讨论】:
在 mongodb 世界中你通常会尝试嵌入数据 阅读更多关于 mongoose.find() 方法的信息。 【参考方案1】:在mysql中加入,在mongodb中使用$lookup
CoursesModel.aggregate([
$lookup:
from: UserModel.collection.name,
localField: "userId",
foreignField: "_id",
as: "user"
,
]).then(result =>
console.log(result);
)
在您的结果中,您将有一个名为user
的附加字段。这将是一个包含与 userId 匹配的所有文档的数组
您可以使用字符串作为名称,而不是 UserModel.collection.name
。但我更喜欢以编程方式使用集合名称。
【讨论】:
我无法将 userId 聚合到 _Id 因为它是 ObjectId 而另一个只是一个字符串..【参考方案2】:您可以使用find()
或findOne()
函数。
courses.findOne(function (err, course)
if (err) return handleError(err);
if (course)
//do Something
);
【讨论】:
以上是关于根据登录用户的 ObjectID 从 Mongo 获取数据的主要内容,如果未能解决你的问题,请参考以下文章
Mongodb:从 mongo shell 中的 ObjectId 执行日期范围查询
BSON::ObjectId 与 Mongo::ObjectID