我想知道是否有一种很好的方法可以为模式分配自定义(用户友好)ID。我希望我自己的ID类似于'1234'而不是由mongoose自动分配的ObjectID。我正在创建的应用程序是一个任务管理应用程序,所以我希望创建的每个任务都有一个易于读取的ID,可以在搜索框中输入,然后将其带到该特定任务。
我的架构
var tickitSchema = Schema({
title : String,
description : String,
completed : Boolean,
priority : Number,
category : Number,
customId : {type: Schema.Types.ObjectId, ref: 'TickitNumber'},
updatedAt : {type: Date},
author : {
type : Schema.Types.ObjectId,
ref : 'User'
},
comments : [{
body : String,
by : {
type : Schema.Types.ObjectId,
ref : 'User'
}
}],
boardToBeDisplayedOn: [{
type : Schema.Types.ObjectId,
ref : 'Board'
}]
});
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var tickitNumberSchema = Schema({
tickitId : Number
});
module.exports = mongoose.model('TickitNumber', tickitNumberSchema);
然后在我的服务器端API(node / express)上我有一个创建任务的功能。
exports.create = function(req, res, next) {
var tickit = Tickit(req.body);
tickit.category = 1;
for(i = 0; i < TickitNumber.length; i++) {
var tn = TickitNumber[i] + 1;
}
if(!req.body.title) {
res.status(400);
res.send('Title is required');
} else {
var data = [];
tickit.author = req.user;
tickit.boardToBeDisplayedOn = req.user.ownsBoard;
tickit.customId = tn;
tickit.save(function (err, tickit) {
if (err || tickit === null) { return res.send(err || new Error('Tickit was not saved but there was no error...odd')); }
async.parallel([
function(callback) {
User.findByIdAndUpdate(req.user.id, {$push: {userTickits: tickit}}, {new: true}, function (err, user) {
if (err) return callback(err);
data.push(tickit);
callback();// or whatever else you want to send
})
},
function(callback) {
Board.findByIdAndUpdate(tickit.boardToBeDisplayedOn,{$push: {boardTickits: tickit}}, {new:true}, function(err, board){
if(err) return res.send(err) ;
data.push(board);
callback();
})
}
], function(err) {
if(err) return next(err);
res.status(201);
res.json(tickit);
});
});
}
}
如果有人知道这样做的更好方法或改进我已经做过的事情,那将非常有帮助,谢谢!