1

我正在尝试在我的 mongo 集合的文档中插入谷歌搜索的结果(使用谷歌自定义搜索 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.errordict的文档执行 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 循环更快,但我不确定我是否正确。

非常感谢!

4

1 回答 1

0

好的。忘记我的帖子。找到了这个。您不能从 update() 中引用当前文档的属性。您必须遍历所有文档并更新它们。

所以这里没有一个巨大的更新。

可以循环执行此类操作。

于 2012-11-29T10:24:39.943 回答