这是一个使用 PyMongo 2.6.3 和 MongoDB 2.4.8 的示例:
>>> from pymongo import MongoClient
>>> from bson import SON
>>> c = MongoClient()
>>> collection = c.db.collection
>>> collection.drop()
>>> collection.create_index([('loc', '2d')])
u'loc_2d'
>>> collection.insert({'loc': [1, 1]})
ObjectId('52d19a5eca1ce961b94f23f4')
>>> collection.insert({'loc': [3, 3]})
ObjectId('52d19a69ca1ce961b94f23f5')
>>> list(collection.find({'loc': SON([('$near', [0, 0]), ('$maxDistance', 2)])}))
[{u'loc': [1, 1], u'_id': ObjectId('52d19a5eca1ce961b94f23f4')}]
可以看到 [0, 0] 2 个单位内的点被包含在结果中,更远的点被排除在外。
与大多数 MongoDB 查询不同,$near
查询要求键按特定顺序排列。$near
必须在之前$maxDistance
,而不是之后。由于常规 Python dicts 不保留键的顺序,因此我使用了 a bson.SON
,它作为 PyMongo 包的一部分安装。SON
就像一本字典,但保留了顺序。