Ich möchte einen Join mit der $ lookup-Operation durchführen.
Meine Objekte enthalten 2D-Koordinatenfelder, und die Sammlung wird mit diesem Feld indiziert.
Ich möchte Objekt Paare finden.
Somit I erste Objekte extrahieren innerhalb eines kleinen Raumbereiches liegen und schiebe diese Auswahl in eine ‚z‘ Sammlung:
p1 = [
{'$geoNear':
{
'near': [0, 0],
'query': { 'loc': { '$geoWithin': {'$box': [bottomleft, topright] } } },
'distanceField': 'dist',
}
},
{'$out': 'z'},
]
Dann komme ich diese ‚z‘ Auswahl mit der gleichen Auswahl aus der ursprünglichen Sammlung:
p2 = [
{'$geoNear':
{
'near': [0, 0],
'query': { 'loc': { '$geoWithin': {'$box': [bottomleft, topright] } } },
'distanceField': 'dist',
}
},
{'$lookup': {'from':'z', 'localField':'y.loc', 'foreignField':'z.loc', 'as':'ns'} },
{'$unwind': '$ns'},
{'$match': {'_id': {'$ne': '$ns._id'}}},
]
Und mit diesem ‚$ Spiel‘ oben, würde Ich mag die Paare die ein Objekt mit mir selbst verwerfen:
{'$match': {'_id': {'$ne': '$ns._id'}}},
Aber das funktioniert nicht:
0 {'_id': ObjectId('5908e654d15fa1043596a382'), 'dist': 0.0, 'ns': {'_id': ObjectId('5908e654d15fa1043596a382')}}
1 {'_id': ObjectId('5908e654d15fa1043596a382'), 'dist': 0.06338084493056388, 'ns': {'_id': ObjectId('5908e674d15fa10435cc739e')}}
2 {'_id': ObjectId('5908e654d15fa1043596a382'), 'dist': 0.227329384268223, 'ns': {'_id': ObjectId('5908e65fd15fa10435ab436e')}}
3 {'_id': ObjectId('5908e654d15fa1043596a382'), 'dist': 0.23787682552971529, 'ns': {'_id': ObjectId('5908e64cd15fa1043585a065')}}
Offensichtlich ist das Spiel arbeiten nicht, da das Paar # 0 ist ein Paar von einem Objekt zu sich.
Wie schreibt man den $ match-Vorgang ?? Es scheint, dass der Operator '$ ne' nicht für Objekt-IDs gelten würde ????
Dank Christian
Vielen Dank für diesen Vorschlag ... Ich werde es versuchen –
... und natürlich werde ich Sie wissen lassen, ob es funktioniert hat ;-). Christian –
OK: Was Sie vorgeschlagen haben funktioniert gut. Danke noch einmal. Ich schließe. Christian –