我想删除所有的地理空间字段是NaN,所以我可以正确地索引我的MongoDB。
我如何找到所有的文档有这个虽然?
db.collection.find( { field: {$not: { $type: 1 } } })
不能工作,因为NaN的类型是Number。
db.collection.find( { field: NaN })
实际上可以工作,尽管我找不到任何关于它的文档
解决方案:
# If you're alright with numpy as a dependency
import numpy as np
db.collection.find({ 'field': np.nan })
或
db.collection.find({ 'field': float('nan') })
供参考:我遇到了这个问题,因为mongoexport
(mongo 3.0.7)将NaN
写入它创建的JSON文件中。这似乎在3.3.5中已经解决了。
所以再次使用PyMongo和类似的船,你可以用Python的None
替换NaN
, 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'])}})