2017-01-17 6 views
6

mongodbに$lookupを使用して結合コレクションを追加したいとします。私は、ユーザーはそれがstring"assignedId":"56ab6663d69d2d1100c074db"

としてassignedId含ま"_id" : ObjectId("56ab6663d69d2d1100c074db"),

タスクのようなユーザーのobjectidが含まれてい

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

以下のようにしようと今、私は2つのコレクション

を持っています今、両方のコレクションで$ lookupを適用するとIDは一致していないので動作しません。そのために

私はそれをGoogleで検索して

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

を含めるための解決策を見つけましたが、この解決策は、そのエラーを投げ、私のために働いていません。

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

は、どのように私を助けてくださいこの問題を解決できますか?

ありがとうございました

+0

文字列からObjectIdへの\ _idフィールドの[Mongodb Join]の可能な複製(https://stackoverflow.com/questions/41093647/mongodb-join-on-id-field-from-string-to-objectid) – felix

答えて

2

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

+1

OK .. .....タスクコレクションで '' assignedId ":ObjectId(" 56ab6663d69d2d1100c074db ")'を実行し、次にassignedIdに基づいてタスクを取得し、そのタスクのクエリをどのように書くことができるかを想定します。結果をループすると、プロパティの "toString()"を実行して、ObjectIdを変換することができます。= ObjectId( "56ab6663d69d2d1100c074db")、function(err、data){....}) ' –

+1

> Stringを使用して、次の検索で使用できます。次のようにしてください:Task32.pind({assignedId:yourvar.toString()}、function(err、data){....}) – HoefMeistert

+1

私は '56ab6663d69d2d1100c07 4db'のようなownerIdを持っています。タスクコレクションでは 'ObjectId(" 56ab6663d69d2d1100c07 4db ")'のような 'assignedId'を持っていますが、' 'TaskId 'どのように動作するのですか?どのようにそのIDの –

関連する問題