Dai un'occhiata a questa pagina su come eseguire query MongoDB avanzate:http://www.mongodb.org/display/DOCS/Advanced+Queries">http://www.mongodb.org/display/DOCS/Advanced+Queries">http://www.mongodb.org/display/DOCS/Advanced+Queries .mongodb.org/display/DOCS/Advanced+Query
Puoi usare una combinazione di $and
e $in
operatori per ottenere ciò di cui hai bisogno. Usando la mongo shell, la tua query sarebbe simile a questa:
db.yourCollectionName.find({$and: {from: {$in: ["toUser", "loggedOnUser"]}}, {to: {$in: ["toUser", "loggedOnUser"]}}})
Credo che questo possa anche darti l'equivalente:
db.yourCollectionName.find({$and: {$or: [{from: "toUser"}, {to: "toUser"}]}}, {$or: [{from: "loggedOnUser"}, {to: "loggedOnUser"}]}}})
Da lì si tratta di convertire quanto sopra nella lingua/DSL che stai utilizzando e ordinare per data.
Nel tuo codice, non hai bisogno di ($and => array())
avvolgendo ciascuno degli oggetti che stai cercando di trovare. Rimuovili, in modo che assomigli a questo:
$cursor = $collection->find(
array('$or' =>
array(
array("from"=>"$profile", "to"=>"$loggeduser"),
array("to"=>"$profile", "from"=>"$loggeduser")
)
)
) ->limit(50)->sort(array('date' => -1));