【问题标题】:Python & MongoDB - How to find by BinData typePython & MongoDB - 如何按 BinData 类型查找
【发布时间】:2013-01-01 10:22:16
【问题描述】:

我是 MongoDB 的新手。无论如何,我正在尝试保存一些经过加密和 base64 编码的数据。

data = b64encode(self.iv + AES.new(self.key, self.mode, self.iv).encrypt(self.pad2(self.data)))
self.db.users.insert({'data':data})
self.db.users.find({'data':data})

插入工作正常,但查找数据返回 0 个结果。 MongoDB shell 输出如下:

db.users.find()
{ "_id" : ObjectId("50f848dc34257b0d5e3d9b29"), "data" : BinData(0,"R1VhaHl3MGpLSStkY0lWU255ZjhneGp2RWk3cEk3MnFRTCsxOTcyOC82WT0=")}

我现在如何通过 BinData 文件类型找到我的文档?我试过 bson.binary.Binary 没有运气。

【问题讨论】:

  • 您确定它返回 0 个结果吗? pymongo 中的find() 方法返回一个游标。也许你应该试试find_one()find().count() 来衡量成功。
  • 是的,就像我在做 .count() 和它的 0 一样。

标签: python mongodb pymongo bson


【解决方案1】:

不确定您是否仍然需要这个(或者为什么要从二进制转换为 base64 再转换为二进制),但我希望这会有所帮助:

import base64
import pymongo
from pymongo import binary
# if pymongo version >= 1.9, use the following instead
# from bson import binary

con = pymongo.Connection()
b64 = base64.b64encode("ajskldfjaklsdjfklasdjf")
bi = binary.Binary(b64)
con.test.test.insert({'foo': bi})
con.test.test.find_one({'foo': bi})

输出:

{
    u'_id': ObjectId('50f99b4a9f956a1924000000'),
    u'foo': Binary('YWpza2xkZmpha2xzZGpma2xhc2RqZg==', 0)
}

【讨论】:

  • 似乎我试图使用错误的二进制文件。我试过 bson.binary,从来没有意识到 pymongo 也有。
  • 好的,我自己试过了,但我收到错误消息,声称 pymongo 中不存在二进制文件。奇怪:(
  • 您可能正在使用更新版本的 pymongo。在以后的版本中,他们将二进制位分离到bson 包中。试试from bson import binary。请参阅以下提交 github.com/mongodb/mongo-python-driver/commit/…
猜你喜欢
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
相关资源
最近更新 更多