繁体   English   中英

MongoDB-猫鼬:文档结构/体系结构

[英]MongoDB - Mongoose: document structure/architecture

我有一个相对简单的问题,但是我一遍又一遍地陷入困境。 我认为这是我第四次尝试重组文档以尝试获得预期的结果。

我想用以下结构在猫鼬中创建数据库:

一个用户有许多帖子评论 帖子评论均属于用户 帖子可以属于多个 ,也可以不属于任何 评论属于某个帖子

这是我到目前为止的内容:

UserSchema

var userSchema = mongoose.Schema({

    local            : {
        email        : String,
        password     : String,
        username     : String,  
        created: {type:Date, default: Date.now} 

    }

});

PostSchema

var PostSchema   = new Schema({
    url: String, 
    highlighted: String, 
    comment: String, 
    image: String, 
    timeStamp: String, 
    description: String, 
    title: String,
    created: {type:Date, default: Date.now}, 
    private: Boolean, 
    favorite: Boolean, 
    readlater: Boolean, 
    postedBy: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    },
    comments: [{
        text: String,
        postedBy: {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'User'
        }
    }], 
    groups: [{
        name: String,
        postedBy: {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'User'
        }
    }]
});

groupSchema

var GroupSchema = Schema({
    name    : String, 
    created: {type:Date, default: Date.now},
    postedBy: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    }
});

尽管在这个假设上我可能是错的,但我认为我已经按原本的方式向用户发布了帖子,并发表了评论来发布关系。 如果我错了,请纠正我。 我目前遇到的主要问题是与小组发布关系。 当前,没有任何关系。 据我所知,几乎就像该群组属于该职位,而不是相反。 我可以想到的唯一一种组织小组的方式是:

var GroupSchema = Schema({
        name    : String, 
        created: {type:Date, default: Date.now},
        postedBy: {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'User'
        }, 
        posts: [{
            title: String, 
            Url: String,
            comments: [{
                text: String
            }]
            etc....
        }]
    });

我在上面的结构中看到的唯一问题是,该帖子将被要求成为组的一部分,而我希望这是可选的。 据我所知,这也不起作用。

如果您可以就该如何组织提供任何建议,那将对我有很大帮助。

先感谢您。

最好的选择是将组和注释架构嵌入到后期文档中。 例如,

var GroupSchema = Schema({
    name: String, 
    created: { type:Date, default: Date.now },
});

var CommentSchema = Schema({
    text: String,
    postedBy: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    }
});


var PostSchema = new Schema({
    url: String,
    ...,
    postedBy: {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'User'
    },
    comments: [CommentSchema] 
    groups: [GroupSchema]
});

现在,如果要查找具有特定组的帖子,则可以按以下方式构建查询。 但是,您可以构建更复杂的查询。

Post.elemMatch("groups", {name: {$in: ["group1", "group2"]}}).then(...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM