Mongodb,猫鼬,架构结构。将某个收藏集放入其他收藏集的字段

时间:2018-07-18 14:04:52

标签: node.js mongodb mongoose database-design schema

我有一个模式“问题”,其中包含十几个问题,我可以添加和删除这些问题,我需要将此集合反映在其他集合的字段中-“用户”以及一个附加字段(嵌套在选项)。

问题模式:

var QuestionScema = new mongoose.Schema({
  key: { type: String, required: true },
  label: { type: String, required: true },
  name: { type: String, required: true },
  page: { type: String, required: true },
  type: { type: String, required: true },
  options: [{ 
    key: {type: String, required: true}, 
    value: {type: String, required: true}
  }],
});

用户架构:

var UserSchema = new mongoose.Schema({
    Name: { type: String, required: true },
    Email: { type: String, required: true, unique: true },
    Password: { type: String, required: true },

    //this is where I need to reflect a Questions collection on each user, 
    //so that it will look something like this//

    Questions: [{
        key: {type: String, required: true},
        //here can be all other fields from Questions collection, that is not a problem
        options: [{ 
            key: {type: String, reuired: true},
            value: {type: String, reuired: true},
            counter: {type: Number, default: 0} //this is the additional field
        }]
    }],

    //

    Notifications: [{
        Title: { type: String },
        Data: { type: String },
        Created: { type: Date, default: Date.now }
    }]
});

我不知道该怎么做。 我还有另一个用户集合,比如说User2,它将回答Questions集合中的那些问题,并且我需要跟踪Users模式(不是User2,我只是保存问题和答案),该问题的选项被选中了多少次。

Questiuons条目如下所示:

  {
    key: Haveyouseenthismovie,
    label: Have you seen this movie?,
    name: Have you seen this movie?,
    page: 1,
    type: dropdown,
    options: [{ 
      key: yes, 
      value: yes
    }, { 
      key: no, 
      value: no
    }]
}

我希望它像这样工作(在每个用户的字段中反映一个集合),所以我不必检查该问题是否在用户集合中(如果未添加),如果存在,是否有我需要的选项如果是,则增加,如果不是,则添加该选项(该用户从“问题”模式中该问题的选项中选择的用户)并增加。看起来真是个无赖。因此,我认为,如果该字段能够反映一个集合会更好,并且我只会在需要的问题上增加所需的选项。 请帮我弄清楚,我在mongo中没有足够的练习,因此有时会遇到困难:)

1 个答案:

答案 0 :(得分:1)

我认为没有一种方法可以像您希望的那样在另一个文档中反映一个集合。

据我了解,以下选项可供您使用:

  • 将整个问题文档嵌入到“用户集合”中的“用户文档”中。
  • 只需在用户集合的用户文档中维护问题文档的'_id'。

请阅读Mongo数据库第https://docs.mongodb.com/manual/applications/data-models-relationships/页的数据建模概念和维护文档之间的关系