node.js - MongoDB 聚合和 $lookup 总是返回空数组
问题描述
已经为此苦苦挣扎了一段时间,无法弄清楚为什么我总是为循环数据获取一个空数组。
我的“用户”集合中有数据
{
storeid: 1,
name: 'joe bloggs'
}
我有一个包含以下数据的商店集合
{
_id: ObjectId(1),
storeName: 'Store name'
}
我想在获取所有用户时提取每个用户所属的商店名称。我有一个像下面这样的查询来做到这一点:
User.aggregate([
{
$lookup: {
from: "store",
localField: "storeid",
foreignField: "_id",
as: "storeDetail"
}
}
])
.then(users => {
res.send(users);
}).catch(err => {
//error
});
但是我在这里得到的是'storeDetail'总是返回空白。不太确定我做错了什么,我已经根据 mongo shell 的 db.getCollectionNames() 检查了我的集合名称是否正确。
谢谢,
解决方案
原来我试图在 localField(字符串)和 foreignField(ObjectId)中使用不同的模式类型。将模型中的 localField 转换为 ObjectId 类型修复了它。
type: String,//Didn't work
type: mongoose.Schema.Types.ObjectId,//Did work
推荐阅读
- reactjs - Retorno:TypeError:无法读取未定义的属性“长度”
- jquery - 通过 jQuery 向 Flask 发送不一致的数据类型请求
- python - 如何将所有固定消息插入文件?
- javascript - 使用 Puppeteer 将数据添加到非表单字段中
- r - 当折线图和条形图来自不同的数据框时,修复 ggplot 中的图例
- php - 在 mac osx big sur 上找不到“unicode/ubrk.h”文件
- node.js - 尽管 node.js 发生了许多变化,但仍不会消失的错误
- python - Python 使用 einsum 理解数组形状
- c# - ITMS-90809:不推荐使用 API 尝试使用 Xamarin iOS 部署 admob 横幅
- flutter - bulderFunctions 的 openContainer 之上的提供者