我有两个系列:
用户:
评价:
我想找到所有评论sex=f
和age>18
(我不想窝,因为评论集会很大)
答案 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.