我目前使用MongooseJS将每个集合的“ _id”更改为BSON UUID。在此之上,我使用一个虚拟的“ id”将“ _id”转换为等效的字符串。它工作得很好,并为我带来了为“ _id”使用UUID的好处,而不是将其存储为浪费磁盘资源的字符串。
下面是一段代码,展示了如何完成
const uuid = require("uuid-mongodb");
require("mongoose-uuid2")(mongoose);
let schema_options = {
"id": false,
"toObject": {
"getters": true,
"virtuals": true
},
"toJSON": {
"getters": true,
"virtuals": true,
"transform"(doc, ret) {
delete ret._id;
}
} };
let schema = new Schema(
{
"_id": {
"type": UUID,
"default": uuid.v4,
"required": true
},
"code": {
"type": String,
"required": true,
"unique": true
},
"name": {
"type": String,
"required": true
}
},
schema_options);
schema.virtual("id").get(function() {
return uuid.from(this._id).toString();
});
schema.virtual("id").set(function(uuid_string) {
this._id = uuid.from(uuid_string);
});
但是,如果我将“ ref”添加到另一个收藏夹中,就像
schema.add({
"test_references": {
"type": [
{
"type": mongoose.Types.UUID,
"ref": "test_references"
}
],
"required": true
}
});
我得到BSON UUID的哈希表示。有没有一种方法可以在获取操作期间制作MongooseJS以将这些引用显示为UUID字符串表示形式
即-我希望这是“ 104e0f2e-3b54-405b-ba81-e87c5eb9f263”,但会收到此“ EE4PLjtUQFu6geh8XrnyYw ==“
注意::如果这是此帖子的错误论坛,请告诉我,我会立即将其移至正确的论坛
答案 0 :(得分:0)
经过更多研究,我能够对返回值应用转换。
如下所示:
this.schema.options.toJSON.transform = function(doc, ret, option) {
let items = [];
delete ret._id;
ret.items.forEach((item) => {
items.push(mongoose.uuid.from(item).toString());
});
ret.items = items;
return ret;
};
浏览数组中的所有项并不理想,但这是我在研究中能找到的最好的