2016-08-29 3 views
9

文書と行を含む構造体を持っています。行にはそのドキュメントへの参照があります。ただし、一部の行は別の行への参照を持つこともできます。文書に関連するすべての行を検索するクエリ

文書に含まれるすべての行(直接リンクされている行と参照されている行を意味します)を取得するためのクエリを作成します。

{_id:1, doc:1 }, 
{_id:3, doc:1, linkedLine:4}, 
{_id:4, doc:2 }, 
{_id:5, doc:2 }, 

私はループをやって存在する場合リンクラインを取得し、DOC = 1で最初の行を取得して行うことができる

linesOfDoc(1) = {_id:1, doc:1},{_id:3, doc:1, linkedLine:4},{_id:4, doc:2 } 

を取得したいと思います。

これは、1つのmongodbクエリでこれを行うことは可能ですか?あなたが行うことはできません

よろしく

+0

なぜ結果は '{_id:4、doc:2}'ですか? '_id:3、doc:1、parent:4}'が '_id:4'を指しているため – styvane

+0

' {_id:4、doc:2} 'が結果にあります – ATX

+0

親の名前をlinkedLineに変更して明確にする。 – ATX

答えて

2

は、SQLで行う場合とまったく同じように、モンゴで参加していますが、aggregation pipelineに近づくことができます。

1つのクエリですべてのデータを取得できましたが、指定した正確な結果を得るには、それをさらに平坦化する必要があります。

MONGO> db.playground.find() 
{ "_id" : 1, "doc" : 1 } 
{ "_id" : 3, "doc" : 1, "linkedLine" : 4 } 
{ "_id" : 4, "doc" : 2 } 

MONGO> db.playground.aggregate([{ $lookup: { from: "playground", localField: "linkedLine", foreignField: "_id", as: "embeddedLinkedLine"}}, { $match: { doc: <id of the document youre looking for> }}]) 
{ "_id" : 1, "doc" : 1, "embeddedLinkedLine" : [ ] } 
{ "_id" : 3, "doc" : 1, "linkedLine" : 4, "embeddedLinkedLine" : [ { "_id" : 4, "doc" : 2 } ] } 
関連する問題