Разгледайте тази страница за това как да правите разширени MongoDB заявки:http://www .mongodb.org/display/DOCS/Advanced+Queries
Можете да използвате комбинация от $and
и $in
оператори, за да получите това, от което се нуждаете. Използвайки mongo shell, вашата заявка ще изглежда по следния начин:
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));