Поиск в коллекции с самообращающимися объектами - PullRequest
2 голосов
/ 25 ноября 2011

У меня есть коллекция:

{
_id - ObjectId
name - string
location - string
..
parentId - ObjectId //link to parent object
}

У меня есть запрос фильтра, и он хорошо работает даже со значениями int (в C #):

var q = Query.Matches(column, new BsonRegularExpression(string.Format("/^{0}/i", name)));

Что я должен сделать для того, чтобыискать по названию родительского объекта?Конечно, с помощью LINQ проблем нет, но можно ли вести поиск на стороне сервера?

Ответы [ 2 ]

5 голосов
/ 25 ноября 2011

В MongoDB нет объединений, но в основном у вас есть два варианта:

Решение 1:

  1. Запрос по имени и получение результата (родители)
  2. Для каждого извлеченного документа повторите запрос и извлеките все документы, для которых совпадают _id и parentId (дочерние элементы)

Решение 2:

В дополнение к parentId также сохраните имя родительского элемента name для каждого документа и запросите непосредственно для parentName

2 голосов
/ 25 ноября 2011

В mongodb нет способа поиска по указанным полям объекта.И вообще, monogdb - это не реляционная база данных, поэтому, на мой взгляд, она вообще не должна поддерживать никаких отношений.

Хорошо известен подход, который заключается в создании дополнительного поля и сохранении (денормализации) информации о том, что вы хотите найти.

Итак, измените вашу схему следующим образом для поиска по имени родительского объекта:

{
_id - ObjectId
name - string
location - string
..
parentId - ObjectId //link to parent object,
parentName
}

Основная идея, которую вы должны понять: mongodb нереалистичен, здесь нет соединений, нет отношений.

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