Tag et kig på denne side om, hvordan du laver avancerede MongoDB-forespørgsler:http://www .mongodb.org/display/DOCS/Advanced+Queries
Du kan bruge en kombination af $and
og $in
operatører for at få det, du har brug for. Ved at bruge mongo-skallen ville din forespørgsel se sådan ud:
db.yourCollectionName.find({$and: {from: {$in: ["toUser", "loggedOnUser"]}}, {to: {$in: ["toUser", "loggedOnUser"]}}})
Jeg tror, at dette også kan give dig det tilsvarende:
db.yourCollectionName.find({$and: {$or: [{from: "toUser"}, {to: "toUser"}]}}, {$or: [{from: "loggedOnUser"}, {to: "loggedOnUser"}]}}})
Derfra er det et spørgsmål om at konvertere ovenstående til det sprog/DSL, du bruger, og sortere efter dato.
I din kode behøver du ikke ($and => array())
indpakning af hvert af de objekter, du prøver at finde. Fjern dem, så det ser sådan ud:
$cursor = $collection->find(
array('$or' =>
array(
array("from"=>"$profile", "to"=>"$loggeduser"),
array("to"=>"$profile", "from"=>"$loggeduser")
)
)
) ->limit(50)->sort(array('date' => -1));