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