use*_*480 4 uuid mongoose mongodb node.js
我试图在 mongoose / Node.js / Express 中为我的模式模型中的 _id 字段定义一个默认的 UUID ...
/**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!");
Run Code Online (Sandbox Code Playgroud)
我还试图编写一个自己的函数,如这篇文章: 在 mongoose 中使用 UUIDs for ObjectID 引用,但这也不起作用......它只是不会在我的数据库中使用 mongoose 创建默认生成的 UUID,为什么?
编辑:我刚刚发现,它创建了一个具有 32 字节 UUID 值的 UUID 或 String 字段,我只是无法直接在 mongo shell 中执行此操作,尽管我认为我的 Schema 强制执行了这一点,但这是合乎逻辑的是无稽之谈,因为 mongo Shell 不知道我的任何后端约束;) 对此感到抱歉......但假设来自 REST API 端点 (POST) 的任何内容都可以安全生成并保存在我的后端,会自动创建 UUID 吗?
推荐使用什么作为 UUID 版本?v1?或者更确切地说是 v4 甚至 v5?
rob*_*lep 11
该default属性应该是一个返回字符串的函数(在您的情况下,是一个 UUIDv4 值)。
不过,这不是您的架构提供的内容:
_id: { type: String, default: uuidv4()}
Run Code Online (Sandbox Code Playgroud)
该声明将运行该uuidv4函数,该函数返回一个字符串,并将该字符串用作默认值。它类似于:
_id: { type: String, default: 'FA6281FF-5961-4F2F-8270-D6AB9954410D'}
Run Code Online (Sandbox Code Playgroud)
相反,将其传递给uuidv4函数的引用:
_id: { type: String, default: uuidv4 }
Run Code Online (Sandbox Code Playgroud)
这样,每次需要默认值时,Mongoose 都会调用该函数,该函数每次都会返回一个新的 UUID。
| 归档时间: |
|
| 查看次数: |
4285 次 |
| 最近记录: |