高度なMongoDBクエリを実行する方法については、次のページをご覧ください: http:// www .mongodb.org / display / DOCS / Advanced + Queries
$and
を組み合わせて使用できます および$in
必要なものを取得するための演算子。 mongoシェルを使用すると、クエリは次のようになります。
db.yourCollectionName.find({$and: {from: {$in: ["toUser", "loggedOnUser"]}}, {to: {$in: ["toUser", "loggedOnUser"]}}})
これでも同等の効果が得られると思います:
db.yourCollectionName.find({$and: {$or: [{from: "toUser"}, {to: "toUser"}]}}, {$or: [{from: "loggedOnUser"}, {to: "loggedOnUser"}]}}})
そこから、上記を使用している言語/ DSLに変換し、日付で並べ替えるだけです。
コードでは、($and => array())
は必要ありません。 見つけようとしている各オブジェクトをラップします。それらを削除すると、次のようになります:
$cursor = $collection->find(
array('$or' =>
array(
array("from"=>"$profile", "to"=>"$loggeduser"),
array("to"=>"$profile", "from"=>"$loggeduser")
)
)
) ->limit(50)->sort(array('date' => -1));