2017-01-28 5 views
1
for hashtag in hashtags: 
    existing_hashtag = hashtags_collection.find({"string": hashtag}).limit(1) 
    if existing_hashtag: 
     hashtags_collection.update({"string": hashtag}, 
            {"$inc": {"popularity": 1}})              
    else: 
     new_hashtag = {"string": hashtag, 
         "popularity": 1} 
     hashtags_collection.insert_one(new_hashtag) 

find_oneは実際のオブジェクトを返しますが、効率的ではないと聞きました。 find + limitは、一致するものが見つからなくてもカーソルオブジェクトを返します。どうすればmongodbでfind + limitを実装できますか?find()。limit()を使用してmongodb内のドキュメントをチェックする適切な方法は何ですか?

答えて

0

最初に、イテラブルここでそれぞれの要素に対してクエリを発行しないでください。ハッシュタグは$inクエリ演算子を使用してください。

これは、countメソッドを使用して、コレクション "string"の値が配列であるかどうかをチェックすることができます。

collection.count({"string": {"$in": hashtags}}) 

最終ではなく、少なくとも、あなたは単にのMongoDBは、バルク操作とupsertオプションを使用して、あなたのために仕事をしましょう、ここif/else文は必要ありません。

結論として、コードは次のようになります。

from pymongo import UpdateOne 


bulk_operations = [UpdateOne({'string': value}, {'$inc': {'popularity': 1 }}, upsert=True) 
        for value in hashtags] 
hashtags_collection.bulk_write(bulk_operations) 
関連する問題