我想配置我的Mongo DB以创建Id列的序列号。防爆。它必须从1001开始,并在插入下一行时自动增加1。我将我的模式定义作为Node.JS的一部分,如何在Node模式中添加此配置?
答案 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,请询问。
希望有所帮助。