Lihat halaman ini tentang cara melakukan kueri MongoDB lanjutan:http://www .mongodb.org/display/DOCS/Advanced+Queries
Anda dapat menggunakan kombinasi $and
dan $in
operator untuk mendapatkan apa yang Anda butuhkan. Menggunakan shell mongo, kueri Anda akan terlihat seperti ini:
db.yourCollectionName.find({$and: {from: {$in: ["toUser", "loggedOnUser"]}}, {to: {$in: ["toUser", "loggedOnUser"]}}})
Saya yakin ini juga dapat memberi Anda yang setara:
db.yourCollectionName.find({$and: {$or: [{from: "toUser"}, {to: "toUser"}]}}, {$or: [{from: "loggedOnUser"}, {to: "loggedOnUser"}]}}})
Dari sana, tinggal mengubah hal di atas ke bahasa/DSL yang Anda gunakan, dan mengurutkan berdasarkan tanggal.
Dalam kode Anda, Anda tidak memerlukan ($and => array())
membungkus setiap objek yang Anda coba temukan. Hapus mereka, sehingga terlihat seperti ini:
$cursor = $collection->find(
array('$or' =>
array(
array("from"=>"$profile", "to"=>"$loggeduser"),
array("to"=>"$profile", "from"=>"$loggeduser")
)
)
) ->limit(50)->sort(array('date' => -1));