2017-02-16 15 views
1

を取り込む必要なデータ照会:マングースは、私は非常に単純であるマングースモデルを持っている

aclSchema = mongoose.Schema({ 
    _id: String, 
    public_read: Boolean, 
    public_write: Boolean, 
}); 
aclModel = mongoose.model('acl', aclSchema); 

そして、それを参照する別のモデル:

thingSchema = mongoose.Schema({ 
    _id: String, 
    _acl: { type: String, ref: 'acl' } 
}); 
thingModel = mongoose.model('thing', thingSchema); 

私はドキュメントを検索できるようにする必要があります(thingModelを)ここで、_acl.public_readはtrueです。私が抱えている問題は、thing._aclがrefであるため、クエリが完了するまで読み込まれません。

例:

thingModel.find({"_acl.public_read":true}).populate('_acl').exec(callback); 

_aclが参照され、それが検索戻っ文書後まで埋めていない、私は推測する、ので、結果を返しません。

ちょっとしたことに、このスキーマはこれよりも複雑で、他には循環参照可能なrefがあります。私は単純化のためにそれらを含めていませんが、基本的な考え方はそこにあります。本当にこの単純な場合、私はサブ文書を使用し、すべて期待どおりに動作します。

これを行うより良い方法はありますか?私は期待される文書を入手しますか?

答えて

1

あなたは今$lookup

$lookupを使用してモンゴ3.2でそれを行うことができ、4つの引数

fromを取りますと結合を実行するために、同じデータベースにコレクションを指定します。 fromコレクションは断片化することはできません。

localField:ドキュメントの入力から$ルックアップステージへのフィールドを指定します。 $ lookupは、fromFolderのドキュメントからforeignFieldへのlocalFieldでの等価一致を実行します。

foreignField:fromコレクション内のドキュメントのフィールドを指定します。

as:入力ドキュメントに追加する新しい配列フィールドの名前を指定します。新しい配列フィールドには、fromコレクションの一致するドキュメントが含まれています。

この場合、直接入力することはできません。同様の質問を参照 Mongoose nested query on Model by field of its referenced model

+0

私が必要としていたものです。 <3.2でそれを行う既知の方法は? – Alex

+0

@Alexの回答が更新されました。 http://stackoverflow.com/questions/19380738/mongoose-nested-query-on-model-by-field-of-its-referenced-model – sidgate

関連する問題