我想使用$ lookup操作执行连接。
我的对象包含2D坐标字段,集合使用此字段编制索引。
我想找到Object 对。
因此,我首先提取位于小空间区域内的对象,并将此选择推送到''系列:
p1 = [
{'$geoNear':
{
'near': [0, 0],
'query': { 'loc': { '$geoWithin': {'$box': [bottomleft, topright] } } },
'distanceField': 'dist',
}
},
{'$out': 'z'},
]
然后我加入了这个' z'从原始集合中选择相同的选项:
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'}}},
]
使用这个' $ match'在上面,我想拒绝涉及一个对象的对:
{'$match': {'_id': {'$ne': '$ns._id'}}},
但这不起作用:
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')}}
显然,匹配没有运作,因为#0对是一对对象。
如何编写$ match操作?似乎' $ ne'运算符不会申请对象ids ????
由于 基督教
答案 0 :(得分:0)
您可以将$match
替换为$redact
。
$redact
会比较$_id
& $ns._id
$$PRUNE
匹配ID和$$KEEP
非匹配ID。
{
$redact: {
$cond: [{
$eq: ["$_id", "$ns._id"]
},
"$$PRUNE",
"$$KEEP"
]
}
}