node.js - 来自多个集合的 $lookup 的 Mongoose 聚合返回空集
问题描述
我有 3 个收藏:
- 用户
- 公司
- 商店
用户和商店对公司有对象引用。
用户:
company: { type: Schema.Types.ObjectId, ref: 'Company'}
商店:
parentCompany: { type: Schema.Types.ObjectId, ref: 'Company'}
我正在尝试对公司进行简单聚合,并希望拥有给定公司的所有用户和商店。
companyModel.aggregate(
[
{ $match: { _id: 'companyidhere123445' } },
{
$lookup: {
from: 'stores',
localField: '_id',
foreignField: 'parentCompany',
as: 'stores',
}
},
{ $unwind: '$stores' },
{
$lookup: {
from: 'users',
localField: '_id',
foreignField: 'company',
as: 'users',
}
},
{ $unwind: '$users' },
]);
我得到一个空数组。(是的,我测试了 id 匹配,model.find 为相同的 id 返回公司,是的,用户和商店分别匹配 idcompany
和parentCompany
字段。我已经检查了可能的重复项,但我不知道我在做什么不同,但我的聚合返回为空。在 mongoose 和 mongo shell 中测试了相同的查询。没有错误,没有警告。)
解决方案
解决了!(我猜是那些日子之一!)
id 在 req.params 中,尽管这对于 findOne 或 findById 之类的查询很有效,但它不适用于聚合,因此在匹配中使用之前,我必须将其重新转换为 mongoose 对象 id:
const matchId = mongoose.Types.ObjectId(req.params.id);
然后:
{ $match: { _id: matchId } },
瞧!(我从哪里可以得到那种用头撞键盘的动图?)
推荐阅读
- python - 没有弃用警告的 unicode_escape
- javascript - Chart.js - 如何更新数据
- python - Python:如何制作非阻塞while循环?
- instagram-api - 带有故事存档失败响应的 Instagram 私人 api 列表卷轴媒体查看器
- c++ - 将句子传递给c ++中的char数组
- python - 有没有办法自动创建新实例?
- python - 使用 Numpy 向量化三个嵌套循环
- node.js - 使用 Express 后处理 Sequelize finder
- nearprotocol - 如何将near-cli创建的密钥导入NEAR Wallet?
- docusignapi - 签名字段未显示在收件人方的文档签名模板中