【发布时间】:2021-09-13 10:28:41
【问题描述】:
我正在创建一个简单的论坛,并希望链接两个集合,以便我可以显示有关在他们的帖子上发帖的用户的数据:
用户.js:
_id:60ccb13a21d65f0c7c4c0690
username: testuser
name: test
还有 Createpost.js
_id:60d80b1305dcc535c4bf111a
postTitle: "test post"
postText: "aaaaa"
postUsername: "testuser"
有人建议我尝试 $lookup,所以我有这个:
router.get('/forum', async (req,res)=>res.render('forum', {
newPost: await Createpost.aggregate([
{
$lookup: {
from: "User",
localField: "postUsername",
foreignField: "username",
as: "postUser"
}
},
{
$sort: {date: -1}
}
])}));
然后我像这样在ejs中显示它:
<% newPost.forEach(newPost => { %>
Posted by: <%= newPost.postUsername %> - Name: <%= newPost.postUser.name %>
<%= newPost.postText %>
<% }%>
来自 Createpost.js 的所有数据都工作正常,postUsername 和 postText 正在显示,但是当涉及到我尝试加入的数据时,比如 name,它什么也没显示。我尝试控制台记录聚合数据,看起来 postUser 只是一个空数组,所以我怀疑它没有从“用户”获取任何数据?但我不知道我能做什么,mongodb 中的集合被称为 users 而不是 User 但把它放在字符串中也行不通。
【问题讨论】:
-
mongoplayground.net/p/eHrR26mcP_n 似乎运行良好,如果打印
newPost.postUser[0].name会发生什么? -
它说无法读取未定义的名称,当我尝试运行此代码时: const aggregatedpost = await Createpost.aggregate([{$lookup: { from: "User", localField: "postUsername", foreignField: "username", as: "postUser"}}]) console.log(aggregatedpost.postUser),它也说未定义..
-
你确定这些集合在同一个数据库下吗?
-
是的,在 mongodb 中显示如下:LHDB > createposts users votes
-
很高兴听到这个消息,良好的团队合作
标签: javascript node.js mongodb express ejs