Dê uma olhada nesta página sobre como fazer consultas avançadas do MongoDB:http://www .mongodb.org/display/DOCS/Advanced+Queries
Você pode usar uma combinação de
$and
e $in
operadores para obter o que você precisa. Usando o shell do mongo, sua consulta ficaria assim:db.yourCollectionName.find({$and: {from: {$in: ["toUser", "loggedOnUser"]}}, {to: {$in: ["toUser", "loggedOnUser"]}}})
Eu acredito que isso também pode lhe dar o equivalente:
db.yourCollectionName.find({$and: {$or: [{from: "toUser"}, {to: "toUser"}]}}, {$or: [{from: "loggedOnUser"}, {to: "loggedOnUser"}]}}})
A partir daí, é uma questão de converter o acima para o idioma/DSL que você está usando e classificar por data.
Em seu código, você não precisa do
($and => array())
envolvendo cada um dos objetos que você está tentando encontrar. Remova-os, para que fique assim:$cursor = $collection->find(
array('$or' =>
array(
array("from"=>"$profile", "to"=>"$loggeduser"),
array("to"=>"$profile", "from"=>"$loggeduser")
)
)
) ->limit(50)->sort(array('date' => -1));