Id 列のシーケンス番号を作成するように Mongo DB を構成したいと考えています。元。1001 から開始し、次の行を挿入すると自動的に 1 ずつ増加する必要があります。Node.JS の一部としてスキーマ定義を持っていますが、この構成を Node スキーマに追加するにはどうすればよいですか?
1885 次
1 に答える
1
MongoDB は、そのままではこれをサポートしていません。これを実装した方法 (C# ではありますが) は、キーと次の番号を使用して "Sequence" コレクションを作成することです。アトミックにインクリメントして次の番号を返し、これをコレクションの ID として使用できます。
これは C# 関数であり、findandmodify mongodb コマンドを使用して、特定の「キー」のシーケンス番号を取得および更新します。
public long GetNextSequenceNumber(string name, string key)
{
var update = new BsonDocument(new BsonElement("$inc", new BsonDocument(new BsonElement("SequenceNumber", 1))));
var query = new BsonDocument("_id", key);
var command = new CommandDocument {
{ "findandmodify" , name },
{ "query", query},
{ "update" , update},
{ "new" , true},
};
var res = Db.RunCommand(command);
if (res.Response["value"] != BsonNull.Value)
{
var o = BsonSerializer.Deserialize<Sequence>(res.Response["value"].ToBsonDocument());
return o.SequenceNumber;
}
else
{
var o = new Sequence() { Id = key, SequenceNumber = 0 };
Db.GetCollection(name).Insert<Sequence>(o);
return o.SequenceNumber;
}
}
およびシーケンス モデル:
public class Sequence
{
public string Id { get; set; }
public long SequenceNumber { get; set; }
}
シーケンス ドキュメントは次のようになります。
{
_id : 'mykey',
SequenceNumber : NumberLong(1234)
}
JavaScript に変換する必要がある場合は、お問い合わせください。
それが役立つことを願っています。
于 2012-12-09T09:57:03.623 に答える