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

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

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

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

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

有人可以帮忙吗。谢谢

【问题讨论】:

    标签: node.js mongodb mongoose insert max


    【解决方案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

    【讨论】:

    • 不使用猫鼬可以吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2017-05-21
    • 2016-12-25
    • 2011-07-18
    • 1970-01-01
    • 2017-10-21
    相关资源
    最近更新 更多