0


MondoDb ドキュメントの特定のサブドキュメントの値を修正したいので、次の更新でそれを変更したり、ドキュメントを変更できるその他の MongoDb 操作を実行したりできません。
たとえば、以下のようなドキュメントが挿入された場合、「eyesColor」の値を変更できないようにします。
{
"id" : "someId",
"name": "Jane",
"eyesColor" : "blue"
}

可能な更新は次のとおりです:
{
"id" : "someId",
"name": "Amy",
"eyesColor" " : "green"
}
そして、この更新後に必要な結果は次のとおりです:
{
"id" : "someId",



私が作成しているプロジェクトには $set および $unset 演算子を使用する可能性がないため、これを行いたいと思います。サブドキュメント (「eyesColor」) の値を取得するために、更新前に既存のドキュメントを読み取ると、作業中のアプリケーションのパフォーマンスが低下します。

実際、私が必要とする制約は、コレクション (上限のあるコレクション) の固定サイズに似ています。違いは、コレクションではなくサブドキュメントにあり、サイズではなくサブドキュメントに含まれる値にあることです。

このタイプの制約に対する解決策はありますか?

4

1 に答える 1

0

MongoDB には制約がありません (唯一の例外: 一意のインデックス)。データベース層でフィールドを「読み取り専用」にする方法はありません。

新しいドキュメントの挿入時に特定のフィールドを追加するが、既存のドキュメントの更新時にこれらのフィールドに影響を与えないupsert ( db.collection.updatewith ) を使用する場合は、これらのフィールドを-operatorの後ろに配置できます。upsert: true$setOnInsert

于 2013-11-21T14:56:52.037 に答える