2012-01-18 55 views
2

说出是否有两个简单的Mongo文档,Person和Class。 Person引用Class来模拟多对多的这种人类需要这些类的关系。我如何找到没有在任何类中注册的人(没有任何类的引用)?如何查找具有对其他文档的引用的MongoDB记录?

我尝试以下,但似乎并没有工作:

db.people.find({"class": {$exists: false}}); 

以上的回报所有的人,即使是上课的人。

欣赏任何输入。谢谢!

+0

显示您的文档结构将帮助解答一个很长的路要走。 @Gates VP回应下面解释了为什么。 – lhagemann 2012-01-18 19:36:57

回答

4

人员引用为建模多对多这种人类带来这些类别关系的类。

首先你必须定义这是如何建模的。有三种方法可以用MongoDB来做到这一点。

  1. 中间表,类似于在SQL中完成的操作。
  2. 一个集合上的引用数组。
  3. 这两个集合中的引用数组。

根据您的查询,它看起来像你有#3,但这不是给定的。

如何找到未在任何课程中注册的人员?

这对你的数据是如何实际存储在数据库中是非常具体的。

假设people包含引用的数组classes,您的数据可能会是这样的:

{ _id: "John", classes: [ 'math', 'science', 'english' ] } 
{ _id: "Mary", classes: [ 'computers', 'biology' ] } 
{ _id: "Steve", classes: [ ] } 

在这种情况下,“史蒂夫”显然有没有课。您的查询正在寻找people,其中classes不存在。但在这种情况下,classes确实存在,它只是空的。

如果您的数据如下所示,您可能需要使用[$size][1]运算符。

相关问题