Node.js无法使用猫鼬设置默认的UUID

时间:2018-06-25 14:27:41

标签: node.js mongodb mongoose uuid

我试图在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?

1 个答案:

答案 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。