根据mongodb'_id`属性创建hashid

时间:2015-03-21 09:58:14

标签: node.js hash mongoose

我的mongo db架构如下:

var MyTable = mongoose.model('items', {
    name: String,
    keyId: String
});

我想将keyId存储为正在创建的项目的'_id'的哈希值。 例如。 比如,我向db“Hello world”添加一个项目,mongodb会在插入时为项目创建一些“_id”。

我想使用_id以便我可以使用它并为插入的同一项生成一个hashid。像这样:

var Hashids = require("hashids"),
    hashids = new Hashids("this is my salt");

var id = hashids.encrypt("507f191e810c19729de860ea");

有没有方法,我可以事先知道id。或者我可以让mongodb根据我指定的条件为我的id字段生成值。

2 个答案:

答案 0 :(得分:1)

您可以使用预保存middleware在保存之前对对象实例执行操作。

var MyTableSchema = new mongoose.Schema({
    name: String,
    keyId: String
});

var Hashids = require("hashids");
MyTableSchema.pre('save', function(next) {
    if (!this.keyId)
        this.keyId = new Hashids("this is my salt").encrypt("507f191e810c19729de860ea");
    next();
});

var MyTable = mongoose.model('items', MyTableSchema);

答案 1 :(得分:1)

请注意这一点。 Hashids模块有一个EncryptHex(或v1.x中的EncodeHex),用于mongodb id。