所以我在cython中使用pongongo API为mongodb遇到了一些奇怪的行为。
def pull_data(connection, context, data_id):
collection_name = "%s-%s" % (COLLECTION_MODIFIER, context.sc_id)
collection = connection[DBNAME][collection_name]
query = {ID_KEY:data_id}
json_data = collection.find_one(query)
return json_data, collection
如果我在命令行中%paste
,我就会得到我期望的结果:
In [66]: pull_data(conn, sc, 123)
Out[66]:
{u'_id': 123,
u'l': Binary("cnumpy.core.multi [...]
但是如果我在cython扩展中进行完全相同的函数调用,则找不到记录。
我可以在两者之间找到的唯一区别是与集合名称有关:
#collection generated in shell call
Collection(Database(Connection('localhost', 27017), u'db'), u'coll-0')
#collection generated in cython call
Collection(Database(Connection('localhost', 27017), u'db'), u'db.coll-0')
如果我尝试在shell中创建具有相同签名的集合,它同样无法找到记录。
有关正在发生的事情或如何在正确的集合中强行搜索的任何线索?
编辑:COLLECTION_MODIFIER = 'coll'
在两种情况下均相同。
此外,在删除连字符后以coll = conn.db1.coll0
形式进行硬编码会产生同样的问题。
答案 0 :(得分:0)
我猜那个
collection_name = "%s-%s" % (COLLECTION_MODIFIER, context.sc_id)
在shell中生成'coll-0'
,在调用中生成'db.coll-0'
。在这两种情况下,sc.sc_id
似乎都是0
。但是COLLECTION_MODIFIER
是不同的,coll
在一个,db.coll
在另一个。
但是你没有向我们展示这些值中的任何一个,或者它们是如何设置的,所以我只能猜测。