使用mongoose模式的自定义ID

时间:2015-04-16 19:44:17

标签: mongoose

我想知道是否有一种很好的方法可以为模式分配自定义(用户友好)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);
      });
  });
}  
}

如果有人知道这样做的更好方法或改进我已经做过的事情,那将非常有帮助,谢谢!

0 个答案:

没有答案