有很多Mongoose自动增量堆栈溢出问题和答案,但是所有人都想用一个递增的数字代替Mongoose ID。我不想替换ID,我只想要一个名为index
的额外字段,它将容纳一个递增的数字。我知道这可能没有道理,但这是我所需要的。有这样的东西吗?
const productSchema = mongoose.Schema({
name: {
type: String,
required: true
},
index: {
type: Number,
autoIncrement: true // something like this?
}
});
因此,我希望index
字段自动递增(1, 2, 3, 4, 5...)
。我真的不在乎是以0
还是1
答案 0 :(得分:0)
MongoDB暂时不支持此类选项。但是,您可以通过编程来实现。
您要做的是创建一个单独的集合。使用此新集合,您可以执行findOneAndUpdate()
调用,并使用选项$inc
在文档的counter
字段(或您的首选替代方法)上执行upsert: true
修订操作。应用。通过设置选项new: true
,您还将获得文档的更新版本,而不是原始版本。
findOneAndUpdate()
调用完成后,您将收到一个包含从1开始的连续整数值的文档。然后,您可以从counter
字段中获取该值并将其存储在您要保存的文档中最初想要此值。如果您希望该值从0开始,只需插入偏移量-1
。
这将导致新集合中没有任何文档,然后在您的第一次findOneAndUpdate()
调用之后恰好有一个文档开始,而该文档只会重复更新其counter
字段。
答案 1 :(得分:0)
您可以尝试在环回中实现autoIncrement。
示例:
increment
保存后的某些字段。可能会帮助您
Model.observe('after save', function (ctx, next) {
const ModelCollection = Model.getDataSource().connector.collection("Model");
let id = ctx.instance.id; //get id which are save.
ModelCollection.update(id, {
$inc: {
index: 1
}
}, {
multi: true
});
next();
});