私は2つのコレクションを持っています。 sources
:
[ { "_id": "0001", "name": "John Doe" }, { "_id": "0002", "address": "123 Some Place" }, { "_id": "0003", "phone": "5555555555" } ]
とconnections
:
[ { "_id": "0001.0002", "_from": "0001", "_to": "0002", "probability": 0.8 }, { "_id": "0002.0003", "_from": "0002", "_to": "0003", "probability": 0.6 } ]
私はすべてのソースの接続のリストを取得するには$graphLookup
をグラフトラバーサルを行うにしようとしています。これは私が持っているコードです:
db.sources.aggregate([ { $match: { '_id': '0001' } }, { $graphLookup: { from: 'connections', startWith: '_id', connectFromField: '_from', connectToField: '_to', maxDepth: 2, depthField: 'numConnections', as: 'destinations' } } ])
これは、レコードを戻るが、私はそれが二つのレコード(0002および0003)を含める必要が予想される場合destinations
配列は空です。私はさらに、トラバース中に確率を掛けて、0001 - > 0002 = 0.8と0001 - > 0003 = 0.48(0.8 * 0.6)となるようにしたいと思います。私は、ここで単純なものを紛失しているに違いありません。なぜなら、私はそれがどのように表示されているのか正確に従うことを試みたからです(https://docs.mongodb.com/manual/reference/operator/aggregation/graphLookup/)。
こんにちはVeeram、私のmongo stackoverflowの問題を見てみることができますか?私は専門家の目が必要です。 [mongo issue](https://stackoverflow.com/questions/47669390/advanced-mongodb-query-needed) – ChrisWorks
いい仕事です!しかし、これは実際のシナリオでは大きなデータセットでは機能しません。なぜなら、第1と第2の 'graphLookup'の間に実際には接続がないからです。したがって、異なるルーツから(例えば、私たちの場合 '0001'ではなく)より多くのパスがある場合、 '0003'これらのパスは第2の(逆の) 'graphLookup'でピックアップされ、最後に乗算されます。しかし、それを修正する方法がわからない... – dnickless