我有文章数据,每篇文章都有多个标签。因此,我没有在文章中存储和复制标签,而是为标签创建了一个单独的集合。在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
但我无法获得相关标签。怎么了?
答案 0 :(得分:1)
你对Python中字符串和ObjectId之间的区别感到困惑。这是一个字符串:
'5839644a41e729e3d36ed28f'
这是一个ObjectId:
ObjectId('5839644a41e729e3d36ed28f')
您一直在使用字符串构建DBRef作为" id":
DBRef(collection="tags", id='5839644a41e729e3d36ed28f')
您需要使用ObjectId构建DBRef作为" id"代替:
DBRef(collection="tags", id=ObjectId('5839644a41e729e3d36ed28f'))