web-dev-qa-db-ja.com

$ lookup MongodbのLocalFieldで文字列をobjectIdに変換する方法

Mongodbで_$lookup_を使用して結合コレクションを追加したい。私は以下のようにしています

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

現在、2つのコレクションがあります

ser"_id" : ObjectId("56ab6663d69d2d1100c074db"),のようなユーザーのobjectidが含まれています

およびTasksassignedIdstringとして含む__"assignedId":"56ab6663d69d2d1100c074db"_

今、両方のコレクションに$ lookupを適用すると、IDが一致しないため機能しません。

そのために私はそれをグーグルで調べて、それに含まれる解決策を見つけました

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

しかし、この解決策は私にはうまくいきません、そのエラーをスローします:

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

この問題の解決方法を教えてください。

ありがとう

17
Saurabh Sharma

集約パイプラインでは不可能です。タイプを変換する方法はありません。 Tasksコレクションの「assignedId」のタイプをObjectIdに変更できますか?それ以外の場合は、コードでそれを実行し、ObjectIdを文字列に変換して、別のクエリで使用する必要があります。

5
HoefMeistert