问题描述
我刚刚开始使用 MongoDB 和 Python 处理地理空间数据。下面是我的代码。对于普通查询,它工作正常,但对于 'near' 查询,我收到错误。
from pymongo import MongoClient
client = MongoClient("mongodb+srv://dummyuser:dummypassword@cluster0.xprs.mongodb.net/test?retryWrites=true&w=majority")
db = client["MyDB"]
col = db["MyCollection"]
query = """{
geometry: {
$near: {
$geometry: {
type: 'Point',coordinates: [77.25467696734609,28.63449787747656]
},$maxdistance: 5000,$mindistance: 10
}
}
}"""
docs = (col.find(query))
for doc in docs:
print(doc)
C:\user\Python\parse-payment-response\venv\Scripts\python.exe C:/user/Python/jsonParser/mongoclnt.py
Traceback (most recent call last):
File "C:/user/Python/jsonParser/mongoclnt.py",line 24,in <module>
docs = [(col.find(query))]
File "C:\user\Python\parse-payment-response\venv\lib\site-packages\pymongo\collection.py",line 1523,in find
return Cursor(self,*args,**kwargs)
File "C:\user\Python\parse-payment-response\venv\lib\site-packages\pymongo\cursor.py",line 144,in __init__
validate_is_mapping("filter",spec)
File "C:\user\Python\parse-payment-response\venv\lib\site-packages\pymongo\common.py",line 494,in validate_is_mapping
raise TypeError("%s must be an instance of dict,bson.son.soN,or "
TypeError: filter must be an instance of dict,or any other type that inherits from collections.Mapping
请帮忙
解决方法
经过大量的努力和搜索,我解决了这个问题。代码如下:
from pymongo import MongoClient
MongoClient("mongodb+srv://dummyuser:dummypassword@cluster0.xprs.mongodb.net/test?retryWrites=true&w=majority")
db = client["MyDB"]
col = db["MyCollection"]
query={"geometry": {"$nearSphere": {"$geometry": {"type": "Point","coordinates": [77.25467696734609,28.63449787747656]},"$maxDistance": 2000,"$minDistance": 10}}}
docs = col.find(query)
for doc in docs:
print(doc)