Как найти запись MongoDB, которая имеет ссылку на другой документ? - PullRequest
2 голосов
/ 18 января 2012

Скажите, если есть два простых монго документа, Персона и Класс.Человек ссылается на класс, чтобы смоделировать отношения «многие ко многим, этот человек берет эти классы».Как найти человека, который не зарегистрирован в ЛЮБЫХ классах (не имеет ссылок ни на какие классы)?

Я пробовал следующее, но, похоже, не работает:

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

Вышеприведенное возвращает всех людей, даже тех, которые посещают занятия.

Цените любой вклад.Спасибо!

1 Ответ

4 голосов
/ 18 января 2012

Персона ссылается на класс, чтобы смоделировать отношение «многие ко многим, этот человек берет эти классы».

Сначала вы должны определить, как это моделируется.Есть три способа сделать это с 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].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...