Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Pymongo插入和查询引用_Mongodb_Python 3.x_Pymongo 3.x - Fatal编程技术网

Mongodb Pymongo插入和查询引用

Mongodb Pymongo插入和查询引用,mongodb,python-3.x,pymongo-3.x,Mongodb,Python 3.x,Pymongo 3.x,我有两个表,我想在第二个表中插入对第一个表的引用。这是我要参考的表,名为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}}) 但是,

我有两个表,我想在第二个表中插入对第一个表的引用。这是我要参考的表,名为
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'不能以'$'开头。

它们的查询可能看起来有点奇怪,但它们都是定制的,它们只是这样定义的
insert('table name',query)


如何正确地执行此操作并能够扩展
player

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

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

这应该行得通。

您的想法的问题是,该Id没有被识别为Id。这就是为什么您必须告诉pyMongo,它必须将其作为外来Id处理。您可以使用ObjectId:

    from bson.objectid import ObjectId        

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

欢迎来到StackOverflow。虽然这段代码可能会解决这个问题,包括如何以及为什么解决这个问题的解释将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请编辑您的答案,添加解释,并说明适用的限制和假设。看看这里→