【问题标题】:MongoDB can't find existing documentsMongoDB 找不到现有文档
【发布时间】:2017-06-29 15:26:13
【问题描述】:

我有一个最奇怪的问题。我有这段使用 pymongo 的 python 代码,它作为 celery 的自动任务运行:

query_filter = {'current_data': {'$exists': True}}
record_list = [x['_id'] for x in db.records.find(query_filter, {'_id': 1})]
for i, record_id in enumerate(record_list):
    my_record = db.records.find_one({'_id': record_id})
    record_data = my_record['current_data']
    perform_action(record_data)

它给了我这个错误:

record_data = my_record['current_data']
TypeError: 'NoneType' object has no attribute '__getitem__'

records 集合有 63500 个文档,其中约 1% 达到了 MongoDB 文档最大大小(16 兆字节)的 80%。我有 pymongo 3.4.0 版。你知道这里会发生什么吗?

【问题讨论】:

  • 你为什么使用列表理解和enumerate?为什么不直接遍历x in db.records.find(...)

标签: python mongodb pymongo


【解决方案1】:

您首先从集合“记录”中查询,然后从集合“记录”中查询。那是错字吗?如果是这样,这就是您的错误的原因:不存在的集合中的“find_one”返回 None。

【讨论】:

    【解决方案2】:

    显然,答案非常简单明了:程序运行时间足够长,人们可以在我查询记录时删除它们。不太可能,但似乎是真的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多