1

(Googleカスタム検索APIを使用して)Google検索の結果をmongoコレクションのドキュメントに挿入しようとしています。検索は'title'、各ドキュメントのフィールドの値に対して実行されます。

昨日テストを実行しましたが、まだ1日あたり100クエリに制限されていたため、APIアカウントを誤って構成したようです。'google_search'その結果、フィールドに正しいAPI結果が含まれる最大100のドキュメントがあります。他のすべてのドキュメントには'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)しかし、forループといくつかのアトミック更新呼び出しの代わりに、単一のmongo呼び出しで同じことを行う方法があったことを知りたいです。正しいかどうかはわかりませんが、単一のメソッド呼び出しは、長いforループよりも高速になると思います。

どうもありがとうございます!

4

1 に答える 1

0

Ok。私の投稿を忘れてください。これを見つけまし。update()内から現在のドキュメントのプロパティを参照することはできません。すべてのドキュメントを繰り返し処理して更新する必要があります。

したがって、ここで大きな更新はありません。

そのようなことをループで行ってもかまいません。

于 2012-11-29T10:24:39.943 に答える