Podívejte se na tuto stránku o tom, jak provádět pokročilé dotazy MongoDB:http://www .mongodb.org/display/DOCS/Advanced+Queries
Můžete použít kombinaci $and
a $in
operátory, abyste získali to, co potřebujete. Pomocí mongo shell by váš dotaz vypadal asi takto:
db.yourCollectionName.find({$and: {from: {$in: ["toUser", "loggedOnUser"]}}, {to: {$in: ["toUser", "loggedOnUser"]}}})
Věřím, že vám to může také poskytnout ekvivalent:
db.yourCollectionName.find({$and: {$or: [{from: "toUser"}, {to: "toUser"}]}}, {$or: [{from: "loggedOnUser"}, {to: "loggedOnUser"}]}}})
Odtud jde o převod výše uvedeného na jazyk/DSL, který používáte, a řazení podle data.
Ve svém kódu nepotřebujete ($and => array())
obalením každého z objektů, které se snažíte najít. Odstraňte je, takže to vypadá takto:
$cursor = $collection->find(
array('$or' =>
array(
array("from"=>"$profile", "to"=>"$loggeduser"),
array("to"=>"$profile", "from"=>"$loggeduser")
)
)
) ->limit(50)->sort(array('date' => -1));