mongoose 如何设置自增字段?

var room_schema = new mongoose.Schema({
    username: { type: String },
    room_num:{type:Number},
    room_name:{type:String}
})

room_num需要唯一Number字段,不自增也行,需要保证唯一性,求解~

阅读 17.8k
8 个回答

自问自答吧,想了一个取巧的办法,在save之前查询所有数据,返回的是一个数组,数组的length本身就是自增,所以直接让他等于数组length就可以了,不知道数据量大了之后会不会影响性能,水平有限,先这样吧....

var room_schema = new mongoose.Schema({
    username: { type: String },
    room_num:{type:Number},
    room_name:{type:String}
})
var room_model = mongoose.model('room', room_schema);
room_model.find({},function(mst,msg){
                var room_num = msg.length
                var room = new room_model({
                    username:doc.username,
                    room_name:req.query.room_name,
                    room_num:room_num
                })
                room.save();
            })

clipboard.png

const Mongoose = require('mongoose');
const Schema = Mongoose.Schema;

let counter = 1;
let CountedId = {type: Number, default: () => counter++};

const ModelSchema = new Schema({
    id: CountedId,
    // ....
});

const Model = Mongoose.model('Model', ModelSchema);

module.exports = Model;

Model.find({ id: { $gt: 0 } }).sort({ id: -1 })
    .then(([first, ...others]) => {
        if (first)
            counter = first.id + 1;
    });

MongoDB 自增id (jarvis1024@gitee.com)

自增好像是没有,但设置唯一索引肯定能保证唯一性

MongoDB没有自增字段。
你可以这样,插入之前查询一下最新的room_num,查询之后+1就是本条数据的room_num

当初做博客的时候也遇到过这样的问题。。可以试试用时间戳啊。。

(new Date()).getTime();

不过注意,这个得到的字符串太长了,在数据库中是以double数据类型存储的

新手上路,请多包涵

试试GUID,最后几位是时间戳的话很难重复

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题