【问题标题】:Data model schema that supports oplog支持 oplog 的数据模型架构
【发布时间】:2014-07-01 07:58:35
【问题描述】:

我正在尝试使用 Meteor 实现一个调查应用程序。我对数据建模的第一个想法是:

我将收集答案的提交集合:

{
  formId: "........",
  values: [
    {question: "What is your name?", answer:"Aykut Yaman"},
    {question: "How old..?", answer:"7"},
    {question: "Hobbies?", answer: ["Kitap Okumak", "Spor Yapmak"]},
    {question: "Foo", answer: "Lorem ipsum ..."}
  ]
}

然后我会像这样查询集合,以便找出调查,如何对某些问题给出特定答案:

submissions.find({$and: [{"values.answer": "7"}, {"values.question": "How old..?"}]})

然后我意识到这个查询is not correct,我必须使用$elemMatch。但似乎 $elemMatch 是 Meteor 中的 unsupported projection

如何更改查询或集合才能使用 oplog,并使我的集合变得简单?

【问题讨论】:

  • 不清楚oplog 是如何在这里发挥作用的。如果您的 MongoDB 部署由副本集支持,则任何添加/更新/删除数据的操作都将保存到主节点上的 oplog,以便辅助节点可以复制和应用这些操作。

标签: javascript mongodb meteor


【解决方案1】:

更好的模型是将答案与问题分开:

{
  formId: "idOfForm",
  values: [
    {_id: "id1", question: "What is your name?"},
    {_id: "id2", question: "How old..?", answer:"7"},
    {_id: "id3", question: "Hobbies?", answer: ["Kitap Okumak", "Spor Yapmak"]},
    {_id: "id4", question: "Foo", answer: "Lorem ipsum ..."}
  ]
}

在 Answers 集合中

{_id: "answer1", formId: "idOfForm", questionId: "id1", answer:"Aykut Yaman"}
... and so on 

这会给您节省一些磁盘空间的额外好处,因为您不需要为每个答案存储问题。您不必为每个答案存储formId,但它可能会提高查询表单的性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 2017-03-23
    相关资源
    最近更新 更多