запрос mongodb к команде лития

db.users.aggregate(
    {$match : 
        {"_id" : ObjectId("50f69176904e1d66affec20d")}
    }, 
    {$unwind : "$connections"}, 
    {$match : 
        {$or : [
            {"connections.users" : {$exists : false}}, 
            {"connections.users.id" : "50f651b8b58bba7fbec2f223"}
        ]}},
    {$group : {_id : "$connections.group"}}
)

Здесь я нахожу имена групп, в которых существует конкретный пользователь. Я получаю правильный результат в оболочке mongodb. Теперь я должен использовать его в литиевом фреймворке. Помогите пожалуйста с командой. Структуру коллекции см. по этой ссылке: http://pastebin.com/P8uMw9cj


person ArunKolhapur    schedule 21.01.2013    source источник


Ответы (2)


Вам следует прочитать статью Тома Майарото "Агрегация MongoDB всех форм и размеров"

Он охватывает Map/Reduce, Grouping и The New Aggregation Framework.

person Eric C    schedule 28.01.2013
comment
Этого уже нет к сожалению. Основная идея такова: Model::connection()-›connection-›selectCollection('collectionName')-›aggregate(); Lithium ничего от вас не скрывает, и вы можете перейти к основным классам расширений Mongo PHP. Просто обратитесь к документации php.net и Mongo оттуда в зависимости от команды или запроса, который вы хотите сделать. - person Tom; 07.07.2015
comment
Также обратите внимание, что вы можете получить имя коллекции с помощью: Model::meta('source') поэтому вам не нужно вводить строку вручную в случае изменения, повторного использования и т.д. - person Tom; 07.07.2015

Вы можете запускать произвольные команды следующим образом:

$files = Files::connection()->connection->command(array("geoNear" => "fs.files", "near" => $coords, "maxDistance" => 1));

Очевидно, вы бы использовали Users::connection() , но есть также некоторые улучшения в агрегации, над которыми работают, хотя не уверен, что они находятся в основной ветке.

Вы также можете увидеть демонстрационное приложение с агрегацией здесь: https://github.com/jmikola/li3-mongodb-aggregation-demo/blob/master/app/controllers/DemoController.php, который должен помочь вам начать работу.

person Chris    schedule 05.02.2013
comment
Это лучший ответ, учитывая, что ссылка выше была удалена. Обратите внимание, что вам может понадобиться использовать selectCollection(), если вы не хотите запускать команду для всей базы данных (это нормально, вы бы указали коллекцию в другом месте в параметрах команды). - person Tom; 07.07.2015