Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在Mongoose上存储模式的正确方法?_Node.js_Mongodb_Mongoose_Schema - Fatal编程技术网

Node.js 在Mongoose上存储模式的正确方法?

Node.js 在Mongoose上存储模式的正确方法?,node.js,mongodb,mongoose,schema,Node.js,Mongodb,Mongoose,Schema,我开始学习一些NodeJ,以及如何从YouTube上的AcademicInd制作RESTAPI,并学习了什么是关系数据库和非关系数据库,等等 使用MongoDB时,写操作相当便宜,因此我希望尽量减少读操作的次数。目前,我正在尝试如何制作一个API,它将用于一个类似于discord的应用程序,尽管这是为了好玩 这是创建模式的正确方法吗 const mongoose = require('mongoose') const userSchema = mongoose.Schema({ _id

我开始学习一些NodeJ,以及如何从YouTube上的AcademicInd制作RESTAPI,并学习了什么是关系数据库和非关系数据库,等等

使用MongoDB时,写操作相当便宜,因此我希望尽量减少读操作的次数。目前,我正在尝试如何制作一个API,它将用于一个类似于discord的应用程序,尽管这是为了好玩

这是创建模式的正确方法吗

const mongoose = require('mongoose')

const userSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    name: { type: String, required: true, unique: true},
    email: { type: String, required: true },
    password: { type: String, required: true }, // TODO: Hashing, etc
    guilds: [{
        _id: mongoose.Schema.Types.ObjectId,
        name: {type: String, required: true},
        channels: [{
            _id: mongoose.Schema.Types.ObjectId,
            name: {type: String, required: true},
            // Only the X most recent messages
            messages: [{
                _id: mongoose.Schema.Types.ObjectId,
                message: {type: String, required: true},
                user: {
                    _id: mongoose.Schema.Types.ObjectId,
                    name: {type: String, required: true}
                }
            }]
        }],
        // Only an X amount of users
        users: [{
            _id: mongoose.Schema.Types.ObjectId,
            name: {type: String, required: true}
        }]
    }]
})

module.exports = mongoose.model('User', userSchema)
然后是公会

const mongoose = require('mongoose')

const guildSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    name: {type: String, required: true},
    channels: [{
        _id: mongoose.Schema.Types.ObjectId,
        name: {type: String, required: true},
        // Only an X amount of messages
        messages: [{
            _id: mongoose.Schema.Types.ObjectId,
            message: {type: String, required: true},
            user: {
                _id: mongoose.Schema.Types.ObjectId,
                name: {type: String, required: true}
            }
        }]
    }],
    // All the users
    users: [{
        _id: mongoose.Schema.Types.ObjectId,
        name: {type: String, required: true}
    }]
})

module.exports = mongoose.model('Guild', guildSchema)
通道模式

const mongoose = require('mongoose')

const channelSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    name: { type: String, required: true },
    guild: {
        _id: mongoose.Schema.Types.ObjectId,
        name: { type: String, required: true },
        channels: [{
            _id: mongoose.Schema.Types.ObjectId,
            name: { type: String, required: true }
        }],
        // The users of the guild, or just the channel? 
        // Could add a users object outisde of the guild object
        users: [{
            _id: mongoose.Schema.Types.ObjectId,
            name: { type: String, required: true }
        }]
    }
})

module.exports = mongoose.model('Channel', channelSchema)
最后是信息

const mongoose = require('mongoose')

const messageSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    user: {
        _id: mongoose.Schema.Types.ObjectId,
        name: {type: String, required: true}
    },
    message: {type: String, required: true},
    channel: {
        guild: {
            _id: mongoose.Schema.Types.ObjectId,
            name: {type: String, required: true}
            // Store more data for each message? 
        }
    }
})

module.exports = mongoose.model('Message', messageSchema) 
我不确定这是否是非关系模式的样子。如果不是,我将如何存储所需的数据

另外,假设我在公会Y的X频道上发布了一条消息,用户a、B和C,我将如何更新所有条目,添加消息

到目前为止,我只使用了User.find({u id:id}).exec().then().catch(),所以我不确定如何更新它们


提前谢谢

邮件的收集应独立进行,不要将其嵌入任何收集中。嵌入将无限增长的数据不是一个好主意

将最后5条消息存储到其他集合的想法看起来很难实现

当您必须更新行业协会频道行业协会用户时,将所有集合中的非规范化数据嵌入用户集合似乎是个问题

你可以将频道嵌入公会。渠道不会无限增长,应该是一个合理的数量,每个公会少于100个渠道,并且可能总是与他们所属的公会一起使用。如果不是,考虑不要嵌入<强>通道<强>到<强>行会< /强>

mongodb的功能是构建反映应用程序如何使用数据的模式。我建议从标准化数据开始。当创建、读取、更新和删除数据出现问题时,请在mongoose模式中进行适当的更改以解决问题。从长远来看,过早的优化只会带来伤害

答案总是取决于细节。由于我不知道所有细节,我推荐MongoDB首席技术支持工程师William Zola撰写的一篇分为三部分的文章