【问题标题】:Mongoengine LongField Overflow ErrorMongoengine LongField 溢出错误
【发布时间】:2013-09-13 05:00:58
【问题描述】:

我有一个文本模型;

class Text(db.Document):
    siphash_value = db.LongField()

然后我使用 siphash 库创建哈希。(https://github.com/majek/pysiphash)

此库将字符串转换为长值,例如 12398370950267227270L

如果我尝试将文档保存到我的数据库;

Text(siphash_value=12398370950267227270L).save()

我收到此错误:

OverflowError: MongoDB can only handle up to 8-byte ints

【问题讨论】:

标签: mongodb mongoengine flask-mongoengine


【解决方案1】:

MongoDB 仅支持 64 位整数 (bson.spec),因此 pymongo 无法转换 Long,因此出现错误。

【讨论】:

  • 所以我不得不使用 crc32 算法而不是 siphash。
【解决方案2】:

您能告诉我们为什么它现在可以工作吗?新图书馆正在返回一个非长字段? (我无法评论您自己的答案,因为我的声望不到 50,抱歉)。

我尝试用 FloatField 替换 LongField,它成功了。实际上它具有相同的结果。 只是有一个不同的符号(1.2398370950267228e+19)。

【讨论】:

  • 那么哪个速度更快? FlotField vs LongField?
  • FloatField 为 64 位宽,因此该数字只是您原始数字的近似值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多