目前,我的网址如下所示:

http://www.sitename.com/watch?companyId=507f1f77bcf86cd799439011&employeeId=507f191e810c19729de860ea&someOtherId=.....

因此,如您所见,它变得相当长,非常快。
我正在考虑缩短这些ObjectId。
想法是我应该在数据库中的每个模型中添加一个名为“shortId”的新字段。因此,您不必:
var CompanySchema = mongoose.Schema({
  /* _id will be added automatically by mongoose */
  name:         {type: String},
  address:      {type: String},
  directorName: {type: String}
});

我们会有这样的:
var CompanySchema = mongoose.Schema({
  /* _id will be added automatically by mongoose */
  shortId:      {type: String}, /* WE SHOULD ADD THIS */
  name:         {type: String},
  address:      {type: String},
  directorName: {type: String},
});

我找到了一种这样的方法:
// Encode
var b64 = new Buffer('47cc67093475061e3d95369d', 'hex')
  .toString('base64')
  .replace('+','-')
  .replace('/','_')
;
// -> shortID is now: R8xnCTR1Bh49lTad

但是我仍然认为它可能会更短。

另外,我找到了这个npm模块:https://www.npmjs.com/package/short-mongo-id
但我看不到它的使用量过多,因此无法确定它是否可靠。

有人有建议吗?

最佳答案

我最终这样做是这样的:
安装shortId模块(https://www.npmjs.com/package/shortid)
现在,当对象存储在数据库中时,您需要以某种方式将此shortId粘贴到您的对象上。我发现最简单的方法是将此功能附加到 Mongoose 函数“save()”的末尾(如果您对模型进行了 promise ,则将其附加到“saveAsync()”)。您可以这样做:

var saveRef = Company.save;
Company.save = function() {
  var args = Array.prototype.slice.call(arguments, 0);
  // Add shortId to this company
  args[0].shortId = shortId.generate();
  return saveRef.apply(this, args);
};
因此,您基本上只是在每个Model.save()函数的后面都添加了此功能以添加shortId。就是这样。
编辑:
此外,我发现您可以像在Schema中这样直接地做得更好,更清洁。
var shortId = require('shortid');
var CompanySchema = mongoose.Schema({
  /* _id will be added automatically by mongoose */
  shortId: {type: String, unique: true, default: shortId.generate}, /* WE SHOULD ADD THIS */
  name: {type: String},
  address: {type: String},
  directorName: {type: String}
});
编辑:
现在,您可以使用性能更高且经过优化的nanoid库。该文档也很好:https://github.com/ai/nanoid/

10-08 18:07