如何找到引用另一个文档的MongoDB记录?

时间:2012-01-18 18:14:03

标签: mongodb

说是否有两个简单的Mongo文档,Person和Class。 Person引用类来模拟多对多这个人 - 这些类的关系。如何找到未在任何类别中注册的人(没有任何类的引用)?

我尝试了以下但似乎没有效果:

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

以上回报所有人,甚至是正在上课的人。

感谢任何输入。谢谢!

1 个答案:

答案 0 :(得分:4)

  

Person引用类来模拟多对多这个人 - 这些类的关系。

首先,您必须定义如何建模。使用MongoDB有三种方法可以做到这一点。

  1. 中间表,类似于在SQL中完成此操作。
  2. 一个集合的引用数组。
  3. 两个集合中的引用数组。
  4. 根据您的查询,看起来您有#3,但这不是给定的。

      

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

    这将非常具体地说明您的数据实际存储在数据库中的方式。

    假设people包含对classes的引用数组,您的数据可能如下所示:

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

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

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