0

したがって、mondo db で設定したい 2 つの制限があります。

1. 1 つのドキュメントのみをデータベースに挿入できるようにし、それ以上は許可しない。この文書は一度追加すると削除できませんが、変更することはできます。また、そのコレクションに他のドキュメントを追加することはできません。

このスキーマでは 1 つの値のみが許可されます。

{ "_id" : ObjectId("5800"), "seconds" : "120", "__v" : 0 }

これ以上新しい秒を追加することはできず、上記のドキュメントのみを変更できます。

私が試してみました:

var numbersSchema = new mongoose.Schema({
  seconds: { type: Number, min: 60 }
},{ capped : true, size:4000,  max : 1 })

ただし、複数のドキュメントを追加することはできます。

{ "_id" : ObjectId("5800c7f53c609009dc5800f4"), "seconds" : 390, "__v" : 0 }
{ "_id" : ObjectId("5800c81b3c609009dc5800f5"), "seconds" : 590, "__v" : 0 }

2. スキーマ エントリ フィールドに最小値を設定します。

var numbersSchema = new mongoose.Schema({
  seconds: Number
})

したがって、この場合、'seconds' は最小値として 60 秒以上である必要があります。これはスキーマで変更する必要があると思いますが、方法がわかりません。「>59」をスキーマに追加することは可能ですか、それともmongoのオプションはすでにありますか?

ヒントをいただければ幸いです。

4

1 に答える 1

2

これは、mongodb の Capped Collectionsを使用して簡単に実現できます。ドキュメントの数に制限を設定できるため、この場合、以下のようにドキュメントの最大数を 1 に設定できます。

db.createCollection("numbers", { capped : true, size:4000,  max : 1 } )

また、コレクションを mongoose スキーマからキャップされたものとして設定する場合は、次のように capped オプションを使用して行うことができます。

var numbersSchema = new mongoose.Schema({
  seconds: Number
},{ capped : true, size:4000,  max : 1 })

このコレクションは、更新可能なドキュメントを常に 1 つだけ保持します。キャップ付きコレクションに一度挿入されたドキュメントは削除できないことに注意してください。したがって、これで削除の問題も解決します。


また、size指定する必要があるオプションは、任意の正の整数値にすることができます。これは、内部で によってmongo最小値4096 bytes、または最も近い 256 の倍数に変換されます。

重要:

ドキュメントの最大数を指定する場合でも、サイズ引数は常に必要です。コレクションが最大ドキュメント数に達する前に最大サイズ制限に達した場合、MongoDB は古いドキュメントを削除します。

出典: MONGODB ドキュメント


また、最小値または最大値を秒に設定する場合は、いつでもマングースの最小値と最大値の検証を使用できます。したがって、次のスキーマが機能するはずです。

var numbersSchema = new mongoose.Schema({
  seconds: { type: Number, min: 60 }
},{ capped : true, size:4000,  max : 1 })
于 2016-10-14T09:28:16.880 に答える