두 개의 모음이 있습니다. sources
:
[ { "_id": "0001", "name": "John Doe" }, { "_id": "0002", "address": "123 Some Place" }, { "_id": "0003", "phone": "5555555555" } ]
및 connections
: 나는 모든 소스 연결 목록을 가져올 수 $graphLookup
와 그래프 탐색을 시도하고있어
[ { "_id": "0001.0002", "_from": "0001", "_to": "0002", "probability": 0.8 }, { "_id": "0002.0003", "_from": "0002", "_to": "0003", "probability": 0.6 } ]
. 이것은 내가 가지고있는 코드 :
db.sources.aggregate([ { $match: { '_id': '0001' } }, { $graphLookup: { from: 'connections', startWith: '_id', connectFromField: '_from', connectToField: '_to', maxDepth: 2, depthField: 'numConnections', as: 'destinations' } } ])
이 기록을 다시 반환하지만 나는 그것이 두 개의 레코드 (0002 및 0003)를 포함한다 기대할 때 destinations
배열이 비어 있습니다. 나는 또한 traversal 중에 0001 -> 0002 = 0.8 및 0001 -> 0003 = 0.48 (0.8 * 0.6)이되도록 확률을 배가하고 싶다. 내가 doucmentation (https://docs.mongodb.com/manual/reference/operator/aggregation/graphLookup/)에서 표현되는 방법을 정확히 따르려고 했으므로 여기에 간단한 것을 놓치고 있어야합니다.
안녕 Veeram, 내 mongo stackoverflow 문제를 살펴볼 수 있습니까? 나는 전문적인 눈이 필요해. [mongo issue] (https://stackoverflow.com/questions/47669390/advanced-mongodb-query-needed) – ChrisWorks
좋은 직장! 그러나 더 큰 데이터 세트가있는 실제 시나리오에서는 작동하지 않습니다. 첫 번째와 두 번째'graphLookup '사이에는 연결이 없다는 것입니다. 그래서 다른 뿌리 (예 : '0001'이 아닌 경우)에서 더 많은 경로가 있다면 '0003'그러면 그 경로는 두 번째 (역방향)'graphLookup'에서 선택되어 결국 곱셈으로 끝납니다. 그래도 문제를 해결하는 방법을 모르겠다. – dnickless