MongoDB通过外键查询

时间:2012-10-28 17:48:01

标签: node.js mongodb schema-design

我有两个系列:

用户:

  • {id:“aaaaaa”年龄:19岁,性别:“f”}
  • {id:“bbbbbb”年龄:30岁,性别:“m”}

评价:

  • {id:777777,user_id:“aaaaaa”,text:“some review data”}
  • {id:888888,user_id:“aaaaaa”,text:“some review data”}
  • {id:999999,user_id:“bbbbbb”,text:“some review data”}

我想找到所有评论sex=fage>18

(我不想窝,因为评论集会很大)

2 个答案:

答案 0 :(得分:2)

您应该将用户的数据包含在每个评论中(a.k.a。作为非正规化):

{ id:777777 , user: { id:"aaaaaa", age:19 , sex:"f" } , text:"some review data" }
{ id:888888 , user: { id:"aaaaaa", age:19 , sex:"f" } , text:"some other review data" }
{ id:999999 , user: { id:"bbbbbb", age:20 , sex:"m" } , text:"mome review data" }

在这里,请阅读此link on MongoDB Data Modeling

  

关于非规范化的注释

     

关系纯粹主义者可能已经感到不安,就好像我们一样   违反一些普遍法律。但是请记住MongoDB   集合不等同于关系表;每个服务一个   独特的设计目标。规范化表提供原子,   孤立的数据块。然而,一份文件更为贴切   一个整体的对象。在社交新闻网站的情况下,它可以   认为用户名是发布的故事所固有的。

     

如何更新用户名?确实,这样的更新会   贵;幸运的是,在这种情况下,它们将是罕见的。阅读节省   非正规化实现的肯定会超过成本   偶尔更新。唉,这不是硬性规定:最终,   开发人员必须评估其应用程序的适当级别   正常化。

答案 1 :(得分:1)

除非使用搜索属性对REVIEWS集合进行反规范化,否则MongoDB不支持在单个查询中查询其他集合。 See this post.