gpt4 book ai didi

node.js - 继承 Mongoose 模式

转载 作者:IT老高 更新时间:2023-10-28 23:24:42 26 4
gpt4 key购买 nike

我想创建一个基本的“实体架构”,其他模型实体将从它继承。我做到了,有点,但奇怪的事情发生了。

这些是我的模式:

  • AbstractEntitySchema
  • 消息架构
  • 用户架构
  • RoomSchema

文件:https://github.com/mihaelamj/nodechat/blob/master/models/db/mongo/schemas.js

但在 MongoDB 中,它们都保存在同一个文档存储中:“实体模型”而不是单独的,例如消息、用户......我得到了应该发生的事情,但没有得到我想要的,独立的商店吗?如果是这样,我将创建一个基本的 JSON/对象作为实体,并为每个实体附加适当的属性。或者,还有更好的方法?谢谢。

最佳答案

Discriminators是一种模式继承机制。它们使您能够在相同的基础 MongoDB 集合之上拥有多个具有重叠模式的模型。而不是不同的文件。看来你误解了mongoose的discriminators。这里有一篇文章可以帮助你正确理解它。

Guide to mongoose discriminators


这里有一些代码示例可以满足您的要求,将派生架构保存为单独的文档

function AbstractEntitySchema() {   
//call super
Schema.apply(this, arguments);
//add
this.add({
entityName: {type: String, required: false},
timestamp: {type: Date, default: Date.now},
index: {type: Number, required: false},
objectID: {type: String},
id: {type: String}
});
};
util.inherits(AbstractEntitySchema, Schema);

//Message Schema
var MessageSchema = new AbstractEntitySchema();
MessageSchema.add({
text: {type: String, required: true},
author: {type: String, required: true},
type: {type: String, required: false}
});

//Room Schema
var RoomSchema = new AbstractEntitySchema();
RoomSchema.add({
name: {type: String, required: true},
author: {type: String, required: false},
messages : [MessageSchema],
});

var Message = mongoose.model('Message', MessageSchema);
var Room = mongoose.model('Room', RoomSchema);

// save data to Message and Room

var aMessage = new Message({
entityName: 'message',
text: 'Hello',
author: 'mmj',
type: 'article'
});

var aRoom = new Room({
entityName: 'room',
name: 'Room1',
author: 'mmj',
type: 'article'
});

aRoom.save(function(err, myRoom) {
if (err)
console.log(err);
else
console.log("room is saved");
});

aMessage.save(function(err) {
if (err)
console.log(err);
else
console.log('user is saved');
});

关于node.js - 继承 Mongoose 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35361297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com