【发布时间】:2020-07-15 08:02:59
【问题描述】:
我的目标是聚合 2 个集合,其中一个集合,即用户集合,我有一个字符串类型 objectid 数组,表示另一个集合中的实际 id,即图像集合。 我使用以下代码
await dbConn()
return User.aggregate([
{
$match:{_id: mongoose.Types.ObjectId(id)}
},
{
$unwind:'$imgIds'
},
{
$lookup:{
from:'images',
localField:'imgIds',
foreignField:'_id',
as:'imgObjs'
}
}
],(err,res)=>console.log(res))
}
所以用户集合中有一项匹配。然后解构 imgIds 数组并尝试通过查找在两者之间建立连接,而 localField 是一个字符串,_id 是一个 ObjectId。 结果是 ImgObjs 是一个空数组。
对这个有什么想法吗? 我使用的是 Mongo 3.6.12 版本
------------编辑--------------
我在我的服务器行为中发现了一些非常奇怪的东西。当我做一个简单的 findById 调用时,我的图像项是一个 ObjectId 数组。 但是当使用聚合时,ObjecIds 变成了字符串。 有人知道这里发生了什么吗?
【问题讨论】:
-
您能分享一下您收藏的样品吗?
-
{ "_id": { "$oid": "5e86209dd907804180cb4e11" }, "title": "flowers", "url": "https://res.cloudinary.com/dppogsm2u/image/upload/v1585763607/sample.jpg", "user": "5e86216947d8db4d9880ba9b", "__v": 0 }{ "_id": { "$oid": "5e86216947d8db4d9880ba9b" }, "following": [], "followers": [], "imgIds": ["5e86209dd907804180cb4e12" ] ,“姓名”:“乔希”,“电子邮件”:“json@gmail.com”,“密码”:“123456”,“__v”:0 } -
@DannyBorisOv :您必须至少升级到较新的版本
4.0或最新的4.2。或者您需要在代码中将所有这些字符串转换为ObjectId()并更新所有文档,然后您就可以执行您的$lookup
标签: javascript mongodb aggregation-framework objectid