pymongo - 单个更新调用中的多个更新

时间:2012-11-29 10:17:51

标签: python mongodb pymongo

我正在尝试在我的mongo集合的文档中插入Google搜索的结果(使用Google自定义搜索API)。搜索是对每个文档的'title'字段的值执行的。

我昨天进行了测试,但似乎我错误配置了我的API帐户,因为我仍然限制在每天100次查询。结果,我有~100个文档'google_search'字段包含正确的API结果。所有其他文档都有'google_search'字段,其中包含以下dict

 {u'error': {u'code': 403,
  u'errors': [{u'domain': u'usageLimits',
  u'message': u'Daily Limit Exceeded',
  u'reason': u'dailyLimitExceeded'}],
  u'message': u'Daily Limit Exceeded'}}

我希望在每个文档上使用不存在的google_search字段或包含google_search.error字典

的字段执行google_search

我可以这样做:

for item in coll.find({'$or': [{'google_search': None}, 
                              {'google_search.error.code': {'$ne': None}}]):
    coll.update({'_id': item['_id']}, {'$set': {'google_search': g_search(item['title'])}})

但是我想知道它有任何方法可以使用单个`coll.update(..., multi=True) mongo调用来执行相同的操作,而不是for循环和几个原子更新调用。 我觉得单个方法调用会比一个冗长的for循环更快,尽管我不确定我是对的。

非常感谢!

1 个答案:

答案 0 :(得分:0)

确定。忘了我的帖子。找到this。您无法在update()中引用当前文档的属性。您将不得不遍历所有文档并更新它们。

所以这里没有大的更新。

可以在循环中做这些事情。