система общения mongodb

Я внедряю очень простую систему разговоров на 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)); 

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

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

Взгляните на эту страницу о том, как выполнять расширенные запросы 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));