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