Ta en titt på den här sidan om hur du gör avancerade MongoDB-frågor:http://www .mongodb.org/display/DOCS/Advanced+Queries
Du kan använda en kombination av $and
och $in
operatörer för att få det du behöver. Med mongo-skalet skulle din fråga se ut ungefär så här:
db.yourCollectionName.find({$and: {from: {$in: ["toUser", "loggedOnUser"]}}, {to: {$in: ["toUser", "loggedOnUser"]}}})
Jag tror att detta också kan ge dig motsvarande:
db.yourCollectionName.find({$and: {$or: [{from: "toUser"}, {to: "toUser"}]}}, {$or: [{from: "loggedOnUser"}, {to: "loggedOnUser"}]}}})
Därifrån handlar det om att konvertera ovanstående till det språk/DSL som du använder och sortera efter datum.
I din kod behöver du inte ($and => array())
slå in vart och ett av objekten som du försöker hitta. Ta bort dem så det ser ut så här:
$cursor = $collection->find(
array('$or' =>
array(
array("from"=>"$profile", "to"=>"$loggeduser"),
array("to"=>"$profile", "from"=>"$loggeduser")
)
)
) ->limit(50)->sort(array('date' => -1));