我试图在Mongoose / Node.js / Express中为我定义默认的UUID 我的架构模型中的_id字段...
/**Demonstrator
*
*/
var mongoose = require('mongoose')
var uuid = require('node-uuid')
require('mongoose-uuid2')(mongoose);
var Schema = mongoose.Schema;
require('mongoose-long')(mongoose);
var Status = require('./Status');
var StatusSchema = Status.Schema;
var SchemaTypes = mongoose.Schema.Types;
const uuidv4 = require('uuid/v4');
var UUID = mongoose.Types.UUID;
var DemonstratorSchema = new Schema({
//_id: SchemaTypes.Long;
_id: { type: String, default: uuidv4()},
id2: SchemaTypes.Long,
Test: String,
})
module.exports = mongoose.model("Demonstrator", DemonstratorSchema);
console.log("DemonstratorSchema created!");
我还试图像这样的帖子中编写自己的函数: Using UUIDs in mongoose for ObjectID references,但这还是行不通的。。。它只是不会在我的数据库中创建带有猫鼬的默认生成的UUID,为什么?
编辑:我刚刚发现,它创建了一个具有32byte UUID值的UUID或String字段,我只是不能直接在mongo shell中执行此操作,尽管我认为我的Schema强制执行此操作,但是逻辑上讲这是胡说八道,因为mongo Shell不知道我的后端约束有什么;)对此感到抱歉.....但也可以安全地假设,任何东西都是来自REST API端点(POST)生成的并保存在我的后端中,会自动创建UUID吗?
以及推荐用作UUID版本的是什么? v1?还是v4甚至v5?
答案 0 :(得分:2)
default
属性应该是一个返回字符串(在您的情况下为UUIDv4值)的函数。
但这不是您的架构所提供的:
_id: { type: String, default: uuidv4()}
该声明将运行uuidv4
函数,该函数返回一个字符串并将该字符串用作默认值。与此类似:
_id: { type: String, default: 'FA6281FF-5961-4F2F-8270-D6AB9954410D'}
相反,将其传递给uuidv4
函数的引用:
_id: { type: String, default: uuidv4 }
这样,每次需要默认值时,Mongoose都会调用该函数,每次都会返回一个新的UUID。