Pymongo插入和查询参考

时间:2018-04-22 09:27:40

标签: mongodb python-3.x pymongo-3.x

我有2个表,我想在第二个表中插入对第一个表的引用。这是我要引用的表,名为player

self.db.insert('player',
        {'char_id': char_info.char_id,
         'name': char_info.name,
         } 

我尝试遵循官方文档并执行此操作:

self.db.insert('admin', {'char_id': {'$ref' : 'player', 'char_id': char_id}})

然而,当我尝试它时,我得到他的错误bson.errors.InvalidDocument: key '$ref' must not start with '$'

他们的查询可能看起来有点奇怪但是他们都是自定义的,他们只是像insert('table name', query)

那样定义

如何正确执行此操作并展开player

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。。但是我没有找到正确的答案。但是,我可以使用DBRef使其工作。

from bson.dbref import DBRef
ref=DBRef(collection='player',id=char_id)
self.db.insert('admin', {'char_id':ref})

这应该有效。

答案 1 :(得分:0)

您的想法的问题在于,Id 没有被识别为 Id。这就是为什么您必须告诉 pyMongo,它必须将其作为外来 ID 处理。你可以用 ObjectId 做到这一点:

    from bson.objectid import ObjectId        

    table2 = db.table2
    table2_elem = {
        'player':  ObjectId('_idStringOfOPlayerElement')
    }
    table2.insert_one(table2_elem)