MongoDB通过外键查询
我有两个集合:
用户:
- {id:“aaaaaa”年龄:19,性别:“f”}
- {id:“bbbbbb”年龄:30,性别:“m”}
点评:
- {id:777777,user_id:“aaaaaa”,文本:“一些评论数据”}
- {id:888888,user_id:“aaaaaa”,文本:“一些评论数据”}
- {id:999999,user_id:“bbbbbb”,文本:“一些评论数据”}
我想find所有的评论凡sex=f
和age>18
(我不想嵌套,因为评论集合将是巨大的)
您应该将用户数据包含在每个评论中(又称为非规范化):
{ 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" }
在这里,阅读这个关于MongoDB数据build模的链接 :
关于非规范化的一个注记
关系纯粹主义者可能已经感到不安,好像我们违反了一些普遍的法律。 但是让我们记住,MongoDB集合不等于关系表; 每个都有独特的devise目标。 规范化的表提供了一个primefaces的,孤立的数据块。 然而,文件更接近地代表整个对象。 在社交新闻网站的情况下,可以认为用户名是发布故事的内在原因。
那么用户名更新呢? 确实,这样的更新将是昂贵的; 很高兴,在这种情况下,他们将是罕见的。 在非规范化中实现的读取节省肯定会超过偶尔更新的成本。 唉,这不是硬性规定:最终,开发人员必须评估他们的应用程序适当的规范化水平。
除非您使用search属性取消对REVIEWS集合的规范化,否则MongoDB不支持在单个查询中查询另一个集合。 看到这个职位。