В отличие от традиционных RBDM, mongoDB не позволяет вам определять любое случайное поле в качестве первичного ключа, поле _id ДОЛЖНО существовать для всех стандартных документов.
По этой причине не имеет смысла создавать отдельное поле uuid.
В mongoose тип ObjectId используется не для создания нового uuid, а для ссылки на другие документы.
Вот пример:
var mongoose = require('mongoose');
var Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;
var Schema_Product = new Schema({
categoryId : ObjectId, // a product references a category _id with type ObjectId
title : String,
price : Number
});
Как видите, не имеет смысла заполнять categoryId ObjectId.
Однако, если вам действительно нужно поле uuid с хорошим именем, mongoose предоставляет виртуальные свойства, которые позволяют вам прокси (ссылаться) на поле.
Проверьте это:
var mongoose = require('mongoose');
var Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;
var Schema_Category = new Schema({
title : String,
sortIndex : String
});
Schema_Category.virtual('categoryId').get(function() {
return this._id;
});
Так что теперь, когда вы вызываете category.categoryId, mongoose просто возвращает _id.
Вы также можете создать метод "set" для настройки виртуальных свойств. Проверьте эту ссылку
для получения дополнительной информации