搜索文档的ObjectId:pymongo

时间:2013-12-21 09:20:16

标签: mongodb pymongo

我想通过'name'属性访问集合中的文档以获取其ObjectId,以便我可以将该唯一的objectid插入到其他文档中以供参考。

cursorObject = db.collectionIngredient.find({'name': 'sugar'})

我想要_id cursorObject字段。

cursorObject.'_id' or cursorObject._id not working.

我已尝试过__getitem____getattribute__这么多网上冲浪但无法找到方法。

请帮忙

2 个答案:

答案 0 :(得分:2)

首先,正如@jjmartinez指出的那样,find返回一个游标,您需要迭代它,以便获取查询返回的文档_id字段属于文档,而不是光标。

我猜你的情况下名称是唯一的,所以如果你使用find_one而不是find,你可以避免光标/迭代。然后你直接得到文件。

然后,要访问_id,您只需要一个标准的dict-item访问权限:

id = doc['_id']

所以我们得到:

ingredient = db.collectionIngredient.find_one({'name': 'sugar'})
if ingredient is not None:
    id = ingredient['_id']
else:
    id = None

答案 1 :(得分:1)

执行cursorObject = db.collectionIngredient.find({'name': 'sugar'})时,您拥有一组文档,而不是单个元素。所以你需要探索所有的收藏品。您需要在光标内迭代:

  try:
    cursorObject = db.collectionIngredient.find({'name': 'sugar'})

except:
    print "Unexpected error:", sys.exc_info()[0]


for doc in cursorObject:
    print doc

这里有Pymongo Tutorial