4

findから返されたドキュメント属性を参照してmodify内で使用する方法を知りたいです。元 :

var totalNoOfSubjects = 5;
db.people.findAndModify( {
    query: { name: "Tom", state: "active", rating: { $gt: 10 } },
    sort: { rating: 1 },
    update: { $set: { average: <reference score value returned by find>/totalNoOfSubjects} }
    } );

私の理解では、findAndModifyはドキュメントをロックするため、findで見つかった属性を使用してmodifyで更新を実行したいと思います。これにより、操作がアトミックになります。

これはmongoでサポートされているのでしょうか。

4

2 に答える 2

1

いいえ、の更新部分で見つかったドキュメントの値を参照することはできませんfindAndModifyupdateこの点でも同じです。

updateそのため、最初にドキュメントをフェッチしてから、またはフェッチしたfindAndMondifyドキュメントから計算された値を含める必要があるため、これをアトミックに行うことはできません。

将来これに対処する可能性のある1つの方法については、 https://jira.mongodb.org/browse/SERVER-458を参照してください。

于 2013-02-12T04:28:46.067 に答える
-1

Atomicityがまさにその理由ですfindAndModify

ドキュメントに記載されているように、Mongoは1つ以上のドキュメント(指定されたものと一致するquery)が1つのドキュメントを(指定されたものを使用して)変更することを検出しupdateます。プロセス全体はアトミックです。デフォルトの実装では、Mongoは見つかったドキュメントを(変更されていない状態で)返します。これは、newオプションを使用して変更できます。

于 2013-02-12T04:15:22.767 に答える