如何在$lookup Mongodb的LocalField中将字符串转换为objectId

如何在$lookup Mongodb的LocalField中将字符串转换为objectId,mongodb,join,lookup,Mongodb,Join,Lookup,我想在mongodb中使用$lookup添加联接集合。我试着如下 { $lookup:{ from:"User", localField:"assignedId", foreignField:"_id", as:"dataa"} } 现在我有两个收藏 用户包含用户的objectid“\u id”:objectid(“56ab6663d69d2d1100c074db”), 和任务其中包含assignedId作为字符串“assignedId”:“56ab6663d69d2

我想在mongodb中使用
$lookup
添加联接集合。我试着如下

{
 $lookup:{
   from:"User",
   localField:"assignedId",
   foreignField:"_id",
   as:"dataa"}
}
现在我有两个收藏

用户包含用户的
objectid
“\u id”:objectid(“56ab6663d69d2d1100c074db”),

任务其中包含
assignedId
作为
字符串
“assignedId”:“56ab6663d69d2d1100c074db”

现在,当在两个集合中应用$lookup时,它不起作用,因为Id不匹配

为此,我在谷歌上搜索了一下,找到了一个包含

{$project:{assignedId:{$toObjectId:$assignedId}}}

但这个解决方案对我不起作用,它抛出了一个错误:

assert: command failed: { "ok" : 0, "errmsg" : "invalid operator '$toObjectId'", "code" : 15999 } : aggregate failed
请帮助我如何解决此问题


谢谢

这在聚合管道中是不可能的。没有转换类型的方法。 能否将Tasks集合中的“assignedId”类型更改为ObjectId?
否则,您必须在代码中执行此操作,将ObjectId转换为字符串并在另一个查询中使用。

OK。。。。。假设在tasks集合中我做了
“assignedId”:ObjectId(“56ab6663d69d2d1100c074db”)
,现在我想在assignedId的基础上获取任务,那么我如何为该任务编写查询…
任务。查找({assignedId:ObjectId(“56ab6663d69d2d1100c074db”)、函数(错误,数据){……}
当您循环遍历结果时,可以执行“toString()”在属性上转换ObjectId=>字符串,以便在下一次查找中使用它。比如:Task.find({assignedId:yourvar.toString()},function(err,data){….}),我的意思是,我有自己的ID,比如
56ab6663d69d2d1100c07‌​4db
现在我想从
tasks
collection
Task.find({assignedId:ownerId},function(err,data){……})
中获取数据,但在tasks集合中我有
assignedId
类似
ObjectId(“56ab6663d69d21100c07‌​4db”)
那么它将如何工作?如何将其与id匹配's@SaurabhSharma您可以使用:var ObjectId=require('mongoose')转换字符串=>ObjectId;var MyObjectId=new objectId('yourstringobjectid');谢谢……它起作用了