javascript - 外国收藏似乎没有出现在汇总数据中
问题描述
我正在创建一个简单的论坛,并希望链接两个集合,以便我可以显示有关在他们的帖子上发布帖子的用户的数据:
用户.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 但把它放在字符串中也不起作用。
解决方案
您正在写“用户”作为集合名称,请检查 MongoDB 中保存的集合名称。它应该保存为“用户”集合。因此,您必须在查找中编写“用户”,如下面的代码:
router.get('/forum', async (req,res)=>res.render('forum', {
newPost: await Createpost.aggregate([
{
$lookup: {
from: "users",
localField: "postUsername",
foreignField: "username",
as: "postUser"
}
},
{
$sort: {date: -1}
}
])}));
推荐阅读
- python - yfinance 的下载不起作用;间隔小于 1 天
- c# - 为什么 await 会触发数据绑定过程?
- networking - 是否可以创建一个 Chromebook 扩展程序来打开和关闭“自动配置 IP 地址”网络设置?
- c# - 具有嵌套对象和 DescribedTaskRenderer 的 ObjectListView
- elasticsearch - 使用 SearchSourceBuilder 和 XContentParser 时在 elasticsearch 中将默认运算符设置为 AND
- javascript - 做不出来
和 - apache-kafka - Deno RangeError: Offset is outside the bounds of the DataView return new DataView(this.buffer, this.byteOffset, this.byteLength).getInt32(
- python - 附加到 python 列表中的不同值的列表
- python - 熊猫:有条件地将数据附加到列?
- php - 在回车前在字符串末尾添加空格