Id的序列号

时间:2012-12-09 03:58:34

标签: node.js mongodb

我想配置我的Mongo DB以创建Id列的序列号。防爆。它必须从1001开始,并在插入下一行时自动增加1。我将我的模式定义作为Node.JS的一部分,如何在Node模式中添加此配置?

1 个答案:

答案 0 :(得分:1)

MongoDB不支持开箱即用。我实现这个的方式(虽然在C#中)是创建一个带有键和下一个数字的“序列”集合。您可以自动递增并返回下一个数字,然后将其用作集合中的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,请询问。

希望有所帮助。