1

次のような人のコレクションがあるとします。

{
    {'_id': 1, 'name': 'Tom', 'age': 22}, 
    {'_id': 2, 'name': 'Joe', 'age': 30}
}

コード1:

p = db.people.find_one({'_id': 1})
db.people.update(p, {'$inc': {'age': 1}})

コード2:

db.people.update({'_id': 1}, {'$inc': {'age': 1}})

pymongoではコード1とコード2が異なることがわかりました。しかし、違いはわかりません。誰か教えてもらえますか?

編集:

わかった。

pymongoのJsonドキュメントは順不同です。したがってp = db.people.find_one({'_id': 1})、「_id」フィールドの値が1であるドキュメントとまったく同じドキュメントを返さない場合がdb.people.update(p, {'$inc': {'age': 1}})あります。クエリpを満たすドキュメントが見つからない場合があります。

4

2 に答える 2

1

詳細を省略すると、コード1は2つのクエリを実行し、コード1は1つのクエリを実行します

1.   client       mongodb          2. client        mongodb

           find_one                         update
        ------------->                   ------------->
           document
        <-------------


           update
        ------------->
于 2013-03-09T12:43:42.997 に答える
1

このcode 1例では、のを使用して完全なドキュメントを取得し_id、検索条件として1完全なドキュメント(変数に保存されている)を使用して更新を実行します。pここでの副作用は、データベースに保存されているドキュメントで、find_one()との間にフィールドが変更された場合update()、更新によってドキュメントが見つからないことです。

したがって、これは次のことと同じです。

db.people.update({'_id': 1, 'name': 'Tom', 'age': 22}, {'$inc': {'age': 1}})

あなたのcode 2例は、である検索条件を使用して更新を実行してい_idます1。この更新は、ドキュメントが存在する限り常に成功します。

于 2013-03-16T03:49:40.957 に答える