所以我现在有两个集合。一个是“posts”,另一个是“users”
这是帖子:
- 识别码(_I)
- 职称
- 正文
- 使用者
- 日期
这是用户:
- 识别码(_I)
- 使用者名称
- 电子邮件
- 口令
我尝试以如下方式使用聚合:
router.get('/:user_id', async (req, res) => {
try {
// const profile = await User.findById(req.params.user_id);
const profile = await User.agregate([
{
'$lookup': {
'from': 'posts',
'localField': '_id',
'foreignField': 'user',
'as': 'posts'
}
}
]);
// Verify profile exists
if (!profile) return res.status(400).json({ msg: 'Profile not found' });
res.json(profile);
} catch (err) {
console.error(err.message);
if (err.kind == 'ObjectId') {
return res.status(400).json({ msg: 'Profile not found' });
}
res.status(500).send('Server error');
}
});
请注意,第一个profile常量是注解的,但它是我用来根据X用户的_id(req.params.user_id)获取用户数据的常量。
现在我想创建的是通过访问X用户的配置文件来显示X用户创建的所有帖子,所以我需要匹配相应的用户,我需要传递req.params.user_id。
这是我的新代码,它是不工作:
router.get('/:user_id', async (req, res) => {
try {
// const profile = await User.findById(req.params.user_id);
const profile = await User.agregate([
{
'$lookup': {
'from': 'posts',
'localField': '_id',
'foreignField': 'user',
'as': 'posts'
}
}, {
$unwind: "$posts"
}, {
$match: {
"posts.user": req.params.user_id
}
}
]);
// Verify profile exists
if (!profile) return res.status(400).json({ msg: 'Profile not found' });
res.json(profile);
} catch (err) {
console.error(err.message);
if (err.kind == 'ObjectId') {
return res.status(400).json({ msg: 'Profile not found' });
}
res.status(500).send('Server error');
}
});
在我的console.log中显示的错误是“user.aggregate不是函数”。希望我能解释一下,谢谢!
我只想在users集合中添加一个新字段(posts数组)。
2条答案
按热度按时间niknxzdl1#
如果有人已经来了同样的要求,就像我一样,这里是解决方案后,两天的研究和询问LOL。
xfb7svmp2#
即使在今天,这也是一个很有用的例子。除了错字:
应该是