私はアグリゲーションパイプラインで実行独自機能
cursor = collection.aggregate(
[
{"$match":{"Time":{"$gte" : datetime.datetime(2016, 4, 4)}}},
{"$group":{"_id": "$Name", "LatLong": {"$cond": [ { "$lte":[distanceFromGPS(latitude1,longitude1,"$Latitude","$Longitude"), 2]}, {"$addToSet": {"Lat":"$Latitude","Long":"$Longitude" }}, ]}}},
{"$project": { "Name":"$_id","LatLong":1,"_id":0,"Count": { "$size":"$LatLong" }}},
{"$sort":{"Count":-1}}
]
)
を、この機能を実行したい機能
distanceFromGPS(latitude1,longitude1,latitude2,longitude2):
latitude2=float(latitude2)
longitude2=float(longitude2)
R = 6371
dLat = math.radians(latitude2-latitude1)
dLon = math.radians(longitude2-longitude1)
a = math.sin(dLat/2) * math.sin(dLat/2) + math.sin(dLon/2) * math.sin(dLon/2) * math.cos(math.radians(latitude1)) * math.cos(math.radians(latitude2))
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
d = R * c
return d
latitude1 = 1.0
longitude1 = 1.0
を持っている私は、エラーどのように
ValueError: could not convert string to float: $Latitude
を取得します私はこれをすることができますか? LatitudeフィールドとLongitudeフィールドは両方とも浮動型です。
機能を果たしているようですが、入力が悪いです。エラーを読むと '$ Latitude'は浮動小数点に変換できないと言われています。 Pythonは、数字ではないことをあなたに伝えています。 – Delioth
mongodbの緯度は文字列型です。浮動小数点数ですが、 "52.678"私はlatitude2 = float(latitude2)を持っています。 longitude2 = float(longitude2)です。何かお勧めしますか? – glitterati
この関数は文字列 '' $ Latitude ''を取得しています。この関数は浮動小数点数に変換できません。関数を' distanceFromGPS(latitude1、longitude1、 "$ Longitude"、 "$ Longitude") '、lat/long1どちらも変数参照ですが、他の2つはリテラル文字列を関数に渡しています。あなたはlambdaをそのままラップすることで修正できるかもしれません。Pythonはそれを 'aggregate()'に渡す前に実行します。 – Delioth