bugfix> python > 投稿

私はMongoDBにかなり慣れていないので、自分の質問を正しく表現したかどうかはわかりませんが、詳細は次のとおりです。

私はPyMongoを使用していますが、次のようなドキュメントがあります:

{'_id': 1, 
 'user_ratings': [
      {'Bob': 3},
      {'Jane': 4}
  ] 
}

私の最初の操作は 'Bob' を設定することでした5と言う新しい番号に変更します。これを行う正しい方法は次のとおりです。

db.ratings.update_one({'_id': 1, 'user_ratings.Bob': 3}, {'$set': {"user_ratings.$.Bob": 5} })

これは期待どおりに機能しますが、上記のクエリでは、どのような user_ratings.Bob でも問題にならないようにしたいと思いますに設定されています。この一致を省略すると、PyMongoは、位置演算子がクエリに必要な一致を見つけられなかったことを訴えます。

値を意味するプレースホルダーを並べ替える方法はありますか?または、そのようなものが存在しない場合、これを達成するための一種の回避策がありますか?ありがとう!

回答 1 件
  • オブジェクトのスキーマを次のように変更する必要があります。

    {'_id': 1, 
     'user_ratings': [
          {'user': 'Bob', 'rating': 3},
          {'user': 'Jane': 'rating': 4}
      ] 
    }
    
    

    これで、次のようにクエリできます。

    db.ratings.update_one(
        {'_id': 1, 'user_ratings.user': 'Bob'},
        {'$set': {'user_ratings.$.rating': 5} })
    
    

あなたの答え