система разговоров mongodb - PullRequest
2 голосов
/ 08 марта 2012

Я реализую очень простую систему разговоров на mongodb.

Идея должна состоять в том, что когда я открываю конво, он должен отображать отправленные и полученные сообщения. Пока все нормально и должно быть довольно просто, используя простой запрос, подобный псевдокоду:

(from "my_id" AND to "friend_id") OR (from "friend_id" AND to "my_id")

это должно быть довольно просто и просто, но запрос mongodb для меня выглядит очень сложно (я из mysql).

Я пытаюсь это сделать, но это совсем не работает, и я не могу определить, где находится ошибка.

$cursor =$collection->find
            (
                array('$or' =>
                    array('$and' => array("from"=>"$profile", "to"=>"$loggeduser")),
                    array('$and' => array("to"=>"$profile", "from"=>"$loggeduser"))
                )
            )->limit(50)->sort(array('date' => -1));

это ничего не возвращает .... Где ошибка?

Заранее спасибо.

1 Ответ

1 голос
/ 08 марта 2012

Посмотрите на этой странице, как выполнять расширенные запросы MongoDB: http://www.mongodb.org/display/DOCS/Advanced+Queries

Вы можете использовать комбинацию операторов $and и $in, чтобы получить то, что вам нужно.Используя оболочку mongo, ваш запрос будет выглядеть примерно так:

db.yourCollectionName.find({$and: {from: {$in: ["toUser", "loggedOnUser"]}}, {to: {$in: ["toUser", "loggedOnUser"]}}})

Я полагаю, что это также может дать вам эквивалент:

db.yourCollectionName.find({$and: {$or: [{from: "toUser"}, {to: "toUser"}]}}, {$or: [{from: "loggedOnUser"}, {to: "loggedOnUser"}]}}})

Отсюда вопрос преобразования приведенного вышена язык / DSL, который вы используете, и сортировку по дате.

В вашем коде вам не нужно ($and => array()), охватывающий каждый из объектов, которые вы пытаетесь найти.Удалите их, чтобы это выглядело так:

$cursor = $collection->find(
    array('$or' => 
        array(
            array("from"=>"$profile", "to"=>"$loggeduser"),
            array("to"=>"$profile", "from"=>"$loggeduser")
        )
    )
) ->limit(50)->sort(array('date' => -1));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...