pymongo dreference无法正常工作

时间:2016-11-26 12:30:32

标签: mongodb pymongo

我有文章数据,每篇文章都有多个标签。因此,我没有在文章中存储和复制标签,而是为标签创建了一个单独的集合。在dreferencing上关注this gist后,我尝试了

In [98]: tag = db.tags.find_one({'_id': ObjectId('5839644a41e729e3d36ed28f')})

In [99]: tag
Out[99]: {u'_id': ObjectId('5839644a41e729e3d36ed28f'), u'code': u'new'}

In [100]: article = db.articles.insert_one({'name': 'hello', 'heading': 'test 123', 'tag': DBRef(collection = "tags", id = '5839644a41e729e3d36ed28f')})

In [104]: article.inserted_id
Out[104]: ObjectId('58397eaea09e012ed4202c74')

In [105]: a = db.articles.find_one({'_id': ObjectId('58397eaea09e012ed4202c74')})

In [106]: a
Out[106]: 
{u'_id': ObjectId('58397eaea09e012ed4202c74'),
 u'heading': u'test 123',
 u'name': u'hello',
 u'tag': DBRef(u'tags', u'5839644a41e729e3d36ed28f')}

In [107]: a['tag']
Out[107]: DBRef(u'tags', u'5839644a41e729e3d36ed28f')

In [110]: tag = db.dereference(a['tag'])

In [112]: print tag
None

但我无法获得相关标签。怎么了?

1 个答案:

答案 0 :(得分:1)

你对Python中字符串和ObjectId之间的区别感到困惑。这是一个字符串:

'5839644a41e729e3d36ed28f'

这是一个ObjectId:

ObjectId('5839644a41e729e3d36ed28f')

您一直在使用字符串构建DBRef作为" id":

DBRef(collection="tags", id='5839644a41e729e3d36ed28f')

您需要使用ObjectId构建DBRef作为" id"代替:

DBRef(collection="tags", id=ObjectId('5839644a41e729e3d36ed28f'))