1

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

4

1 回答 1

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,请询问。

希望有帮助。

于 2012-12-09T09:57:03.623 回答