在 MongoDB 中插入 MAX(numberField) + 1

Posted

技术标签:

【中文标题】在 MongoDB 中插入 MAX(numberField) + 1【英文标题】:Insert MAX(numberField) + 1 in MongoDB 【发布时间】:2017-03-21 16:33:29 【问题描述】:

在插入新文档时,我只想插入一个值必须为 max(field) + 1. 的字段 例如 像这样的

db.test.insert(numberField : MAX(numberField) + 1)

此外,如果没有文档,第一个文档的 numberField 值必须为 0。在增量 1、2、3 之后也是如此。

我不希望两个查询一个找到最大数量,另一个插入增加 1。

有人可以帮忙吗。谢谢

【问题讨论】:

【参考方案1】:

没有用于此的内置命令。获取此文档并自己计算密钥。

【讨论】:

我还能做些什么吗?【参考方案2】:

有很多关于如何在 mongoose 中创建自增字段的堆栈溢出帖子。

auto-increment-document-number-in-mongo-mongoose

create-unique-autoincrement-field-with-mongoose


@edtech

这是使用 Mongoose 实现自动递增字段的一个很好的示例:

var CounterSchema = Schema(
    _id: type: String, required: true,
    seq:  type: Number, default: 0 
);
var counter = mongoose.model('counter', CounterSchema);

var entitySchema = mongoose.Schema(
    testvalue: type: String
);

entitySchema.pre('save', function(next) 
    var doc = this;
    counter.findByIdAndUpdate(_id: 'entityId', $inc:  seq: 1 , function(error, counter)   
        if(error)
            return next(error);
        doc.testvalue = counter.seq;
        next();
    );
);

您应该首先从mongodb documentation 执行步骤1。


编辑 - 没有猫鼬的 Soluce - 又名 MongoDB 本机驱动程序

您可以使用mongodb native node.js driver 并实现这些堆栈溢出帖子中解释的解决方案之一:

auto-increment-in-node-mongodb-native-using-counters-collection

Creating incrementing numbers with mongoDB

【讨论】:

不使用猫鼬可以吗?

以上是关于在 MongoDB 中插入 MAX(numberField) + 1的主要内容,如果未能解决你的问题,请参考以下文章

使用 mongoengine 将多文档插入到 mongodb

MongoDB-3.2 oplog删除策略优化

mongodb-2

如何使用 C++ 在 MongoDB 中创建地理空间索引

《MongoDB入门教程》第26篇 聚合统计之$max/$min表达式

mongodb怎么插入多个文档