2017-01-17 57 views
6

我想在mongodb中使用$lookup添加聯結集合。我想,如下

{ 
$lookup:{ 
    from:"User", 
    localField:"assignedId", 
    foreignField:"_id", 
    as:"dataa"} 
} 

現在我有兩個集合

用戶包含用戶的objectid"_id" : ObjectId("56ab6663d69d2d1100c074db"),

任務它包含assignedIdstring"assignedId":"56ab6663d69d2d1100c074db"

現在,在兩個集合中應用$ lookup它不工作,因爲Id的不匹配。

對於我GOOGLE了一下,發現一個解決方案,包括

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

但這種方法不工作對我來說,它拋出一個錯誤:

assert: command failed: { "ok" : 0, "errmsg" : "invalid operator '$toObjectId'", "code" : 15999 } : aggregate failed 

請幫助我如何我可以解決這個問題嗎?

謝謝

+0

可能的重複[Mongodb加入\ _id字段從字符串到ObjectId](https://stackoverflow.com/questions/41093647/mongodb-join-on-id-field-from-string-to-jejedd) – felix

回答

2

這在聚合管道中是不可能的。沒有方法來轉換類型。 您可以將Tasks集合中的「assignedId」類型更改爲ObjectId嗎? 否則,您必須在代碼中執行此操作,將ObjectId轉換爲字符串並在另一個查詢中使用。

+1

OK .....假設在任務集合中,我執行''assignedId':ObjectId(「56ab6663d69d2d1100c074db」)',現在我想根據assignedId獲取任務,然後如何爲這個任務寫入查詢。 find({assignedId:ObjectId(「56ab6663d69d2d1100c074db」)},function(err,data){....})' –

+1

當您循環播放結果時,您可以對屬性執行「toString()」以將ObjectId = >字符串,以便您可以在下次查找中使用它。例如:Task.find({assignedId:yourvar.toString()},function(err,data){....}) – HoefMeistert

+1

我的意思是,我有ownerId,比如'56ab6663d69d2d1100c07 4db',現在我想從中獲取數據'tasks' collection'Task.find({assignedId:ownerId},function(err,data){....})'但是在任務集合中,我有像'ObjectId(「56ab6663d69d2d1100c07 4db」)''assignedId''那麼它將如何工作?如何將它匹配id的 –

相關問題