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=fage>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不支持在单个查询中查询另一个集合。 看到这个职位。