首页 > 解决方案 > 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() 检查了我的集合名称是否正确。

谢谢,

标签: node.jsmongodbexpressmongoose

解决方案


原来我试图在 localField(字符串)和 foreignField(ObjectId)中使用不同的模式类型。将模型中的 localField 转换为 ObjectId 类型修复了它。

type: String,//Didn't work
type: mongoose.Schema.Types.ObjectId,//Did work

推荐阅读