Bekijk deze pagina over het uitvoeren van geavanceerde MongoDB-query's:http://www .mongodb.org/display/DOCS/Advanced+Queries
U kunt een combinatie van de $and
. gebruiken en $in
operators om te krijgen wat je nodig hebt. Als u de mongo-shell gebruikt, ziet uw vraag er ongeveer zo uit:
db.yourCollectionName.find({$and: {from: {$in: ["toUser", "loggedOnUser"]}}, {to: {$in: ["toUser", "loggedOnUser"]}}})
Ik denk dat dit je ook het equivalent kan opleveren:
db.yourCollectionName.find({$and: {$or: [{from: "toUser"}, {to: "toUser"}]}}, {$or: [{from: "loggedOnUser"}, {to: "loggedOnUser"}]}}})
Van daaruit is het een kwestie van het bovenstaande omzetten naar de taal/DSL die je gebruikt en sorteren op datum.
In je code heb je de ($and => array())
niet nodig het inpakken van elk van de objecten die u probeert te vinden. Verwijder ze, zodat het er zo uitziet:
$cursor = $collection->find(
array('$or' =>
array(
array("from"=>"$profile", "to"=>"$loggeduser"),
array("to"=>"$profile", "from"=>"$loggeduser")
)
)
) ->limit(50)->sort(array('date' => -1));