我想删除所有NaN的geospacial字段,以便我可以正确索引我的MongoDB.
我怎么找到所有这些文件呢?
db.collection.find( { field: {$not: { $type: 1 } } })
Run Code Online (Sandbox Code Playgroud)
由于NaN的类型为Number,因此无法工作.
hap*_*ore 19
db.collection.find( { field: NaN })
Run Code Online (Sandbox Code Playgroud)
实际上工作,虽然我找不到任何文件
PyMongo解决方案:
# If you're alright with numpy as a dependency
import numpy as np
db.collection.find({ 'field': np.nan })
Run Code Online (Sandbox Code Playgroud)
要么
db.collection.find({ 'field': float('nan') })
Run Code Online (Sandbox Code Playgroud)
仅供参考:我遇到了这个问题,因为mongoexport(mongo 3.0.7)NaN写入了它创建的JSON文件。 这似乎在3.3.5中已解决。
因此,再次使用PyMongo并在类似的船上,您可以替换NaN为Python的None,mongoexport它将转换为JSON有效null:
import numpy as np
for doc in list(db.collection.find({ 'field': np.nan }))
update_one({'_id': ObjectId(doc['_id'])},
{'$set': {'field': (lambda x: None if np.isnan(x) else x)(doc['field'])}})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10003 次 |
| 最近记录: |