如何在$lookup Mongodb的LocalField中将字符串转换为objectId
我想在mongodb中使用如何在$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
$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,比如56ab6663d69d2d1100c074db
现在我想从tasks
collectionTask.find({assignedId:ownerId},function(err,data){……})
中获取数据,但在tasks集合中我有assignedId
类似ObjectId(“56ab6663d69d21100c074db”)
那么它将如何工作?如何将其与id匹配's@SaurabhSharma您可以使用:var ObjectId=require('mongoose')转换字符串=>ObjectId;var MyObjectId=new objectId('yourstringobjectid');谢谢……它起作用了