Node.js 无法使用 mongoose 设置默认 UUID

Node.js can not set default UUID with mongoose

我试图在 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!");

我也在尝试编写一个自己的函数,就像这样 post: Using UUIDs in mongoose for ObjectID references,但这也没有用...它不会在我的数据库中创建默认生成的带有 mongoose 的 UUID,为什么?

编辑:我刚刚发现,它创建了一个 UUID 或 String 字段,具有 32 字节的 UUID 值,我只是无法直接在 mongo shell 中执行此操作,尽管我我认为我的 Schema 有点强制执行此操作,但逻辑上这是无稽之谈,因为 mongo Shell 不知道我的后端约束;)对此感到抱歉....但它也是可以安全地假设,任何来自 REST API 端点 (POST) 的生成并保存在我的后端的东西都会自动创建 UUID?

推荐使用什么UUID版本? v1?或者更确切地说是 v4 甚至 v5?

default 属性 应该是 return 一个字符串的函数(在你的例子中,一个 UUIDv4 值)。

不过,这不是您的架构所提供的:

_id: { type: String, default: uuidv4()}

该声明将 运行 uuidv4 函数,其中 return 是一个字符串,并将该字符串用作默认值 。类似这样:

_id: { type: String, default: 'FA6281FF-5961-4F2F-8270-D6AB9954410D'}

相反,向其传递对 uuidv4 函数的引用:

_id: { type: String, default: uuidv4 }

这样,每次需要默认值时,Mongoose 都会调用该函数,每次都会 return 一个新的 UUID。