我的MongoDB集合包含顺序整数字段。
我需要找到最佳方法来找到由于记录删除而发生的序列中的“漏洞”。
例如,如果我收集了这些文件:
{ _id: "aab", seq: 1 ... }, { _id: "aac", seq: 2 ... }, { _id: "aad", seq: 4 ... }
我做的下一个插入,需要是:
{ _id: "aae", seq: 3 ... }
答案 0 :(得分:0)
您可以创建MongoDB Stored Function来实现此目标。
您可以创建一个JavaScript存储函数,该函数存储文档的“序列号”,并在某个集合“StoreDeletedSequenceNumCollection”中删除。
每当您对集合执行删除操作时,请确保调用“存储函数”,该函数实际存储将在集合“StoreDeletedSequenceNumCollection”中删除的文档的序号。
db.system.js.save( { _id: "DeletedSeqNum",
value: function (seqNum) {
db.StoreDeletedSequenceNumCollection.insert(
{ _id : seqNum}); return 1 ; }
}
);
当您插入文档时,您可以检查“StoreDeletedSequenceNumCollection”中是否存在任何序列号,如果存在,您可以从中获取MINIMUM序列号并可用于插入,否则,如果“StoreDeletedSequenceNumCollection”为为空,您可以从实际集合中获取“MAXIMUM”序列号,并可以使用“MAXIMUM + 1”作为序列号进行插入。