Hãy xem trang này về cách thực hiện các truy vấn MongoDB nâng cao: http:// www .mongodb.org / display / DOCS / Advanced + Queries
Bạn có thể sử dụng kết hợp $and
và $in
để có được những gì bạn cần. Sử dụng mongo shell, truy vấn của bạn sẽ trông giống như sau:
db.yourCollectionName.find({$and: {from: {$in: ["toUser", "loggedOnUser"]}}, {to: {$in: ["toUser", "loggedOnUser"]}}})
Tôi tin rằng điều này cũng có thể cung cấp cho bạn điều tương đương:
db.yourCollectionName.find({$and: {$or: [{from: "toUser"}, {to: "toUser"}]}}, {$or: [{from: "loggedOnUser"}, {to: "loggedOnUser"}]}}})
Từ đó, vấn đề là chuyển đổi ở trên sang ngôn ngữ / DSL mà bạn đang sử dụng và sắp xếp theo ngày.
Trong mã của bạn, bạn không cần ($and => array())
gói từng đối tượng mà bạn đang cố gắng tìm kiếm. Loại bỏ chúng, vì vậy nó trông giống như sau:
$cursor = $collection->find(
array('$or' =>
array(
array("from"=>"$profile", "to"=>"$loggeduser"),
array("to"=>"$profile", "from"=>"$loggeduser")
)
)
) ->limit(50)->sort(array('date' => -1));