1

Id 列のシーケンス番号を作成するように Mongo DB を構成したいと考えています。元。1001 から開始し、次の行を挿入すると自動的に 1 ずつ増加する必要があります。Node.JS の一部としてスキーマ定義を持っていますが、この構成を Node スキーマに追加するにはどうすればよいですか?

4

1 に答える 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 に答える