我如何找到所有的文档与一个字段,是MongoDB的NaN



我想删除所有的地理空间字段是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'])}})

最新更新