Один из способов, которым вы можете запросить что-то вроде следующего:
db.people.find({name : 'Joe', 'path' : { $all : [ObjectId("4e0fcf1722b7a9439200002e"), ObjectId("4e0fcf1622b7a9439200002b")]}})
Однако я думаю об этом недостатке:
- Вы не можете заменитьобъект отношения / включается непосредственно в оболочку монго.Вы должны использовать объект ObjectId
- . Условие $ all не требует, чтобы порядок пути был строго одинаковым, что означает, что придет человек с именем «Джо», на который ссылается путь «родной город / город /».вверх, а также "Джо" из "Тома / родного города".
Я бы предположил, что второй может нарушить условия сделки.Кроме того, я предполагаю, что mongoid в некоторых случаях передает параметры запроса непосредственно в mongodb (или, по крайней мере, есть способы сделать это).Следовательно, должна быть возможность выполнить поиск в коде ruby, используя приведенный выше запрос.
Тем не менее, я сделаю еще один повторный поиск по этому вопросу и опубликую свои выводы.
Надеюсь, что это поможет.
Редактировать
Чтобы облегчитьВторая проблема, описанная выше, - это еще один способ опроса человека с определенным путем.Найдите его ниже:
db.people.find({name : 'Joe', 'path.0' :ObjectId("4e0fcf1722b7a9439200002e"), 'path.1':ObjectId("4e0fcf1622b7a9439200002b")})
Это гарантирует, что путь - это именно то, что вы ищете.Однако это работает в оболочке mongodb, и вам все равно может понадобиться выяснить, как mongoid может выполнить эквивалент этого.Кроме того, вам может потребоваться построить этот запрос динамически, чтобы создать путь для человека, и это (для людей с глубоким вложением) может просто стать длинным и безобразным.
Я бы предложил пролистать следующие ссылки в документации mongodb, чтобы лучшепонимание.
http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray
Надеюсь, это то, что вы искали.