Spójrz na tę stronę, aby dowiedzieć się, jak wykonywać zaawansowane zapytania MongoDB:http://www .mongodb.org/display/DOCS/Zaawansowane+zapytania
Możesz użyć kombinacji $and
i $in
operatorzy, aby uzyskać to, czego potrzebujesz. Używając powłoki mongo, twoje zapytanie wyglądałoby mniej więcej tak:
db.yourCollectionName.find({$and: {from: {$in: ["toUser", "loggedOnUser"]}}, {to: {$in: ["toUser", "loggedOnUser"]}}})
Uważam, że może to również dać ci odpowiednik:
db.yourCollectionName.find({$and: {$or: [{from: "toUser"}, {to: "toUser"}]}}, {$or: [{from: "loggedOnUser"}, {to: "loggedOnUser"}]}}})
Następnie wystarczy przekonwertować powyższe na język/DSL, którego używasz, i posortować według daty.
W swoim kodzie nie potrzebujesz ($and => array())
owijanie każdego z obiektów, które próbujesz znaleźć. Usuń je, aby wyglądało to tak:
$cursor = $collection->find(
array('$or' =>
array(
array("from"=>"$profile", "to"=>"$loggeduser"),
array("to"=>"$profile", "from"=>"$loggeduser")
)
)
) ->limit(50)->sort(array('date' => -1));