【发布时间】:2021-06-30 09:48:37
【问题描述】:
对于措辞不当的标题,我深表歉意,我不知道如何正确措辞。所以我有 2 个收藏:
用户
_id:60ccb13a21d65f0c7c4c0690
username: testuser
name: test
然后创建帖子
_id:60d80b1305dcc535c4bf111a
postTitle: "test post"
postText: "aaaaa"
postUsername: "testuser"
如果我想从他的论坛帖子上显示的用户那里获取 testuser 的数据,那么最好的方法是什么?这是我迄今为止尝试过的:
router.get('/forum', async (req,res)=>res.render('forum', {newPost: await Createpost.find().sort({ date: 'desc'}),
postUser: await User.find({"username": Createpost.postUsername})}));
我的尝试是在 User 集合中搜索与 Createpost 集合中的 postUsername 字段匹配的用户名字段,然后在 EJS 中显示:
<% newPost.forEach(newPost => { %>
Posted by: <%= newPost.postUsername %> - Name: <%= postUser.name %>
<%= newPost.postText %>
<% }%>
但是当我这样做时,页面上什么也没有出现,我想不出任何解决方案。任何帮助将不胜感激。
编辑:我使用了 cmets 中建议的聚合,但以下只是导致显示 [object Object] 的文本,我不确定为什么:
router.get('/forum', async (req,res)=>res.render('forum', {newPost: await Createpost.find().sort({ date: 'desc'}),
postUser: Createpost.aggregate([{$lookup: { from: "User", localField: "postUsername", foreignField: "username", as: "postUser"}},{$unset: "postUsername"}])}));
EJS:
<% newPost.forEach(newPost => { %>
Posted by: <%= newPost.postUsername %> - <%= postUser %>
<%= newPost.postText %>
<% }%>
【问题讨论】:
-
方法是使用聚合查询通过
username“加入”两个集合。见$lookup。
标签: javascript node.js mongodb express ejs