查看此页面,了解如何执行高级 MongoDB 查询:http://www.mongodb.org/display/DOCS/Advanced+Queries http://www.mongodb.org/display/DOCS/Advanced+Queries
您可以使用以下组合$and
and $in
运营商来获取您需要的东西。使用 mongo shell,您的查询将如下所示:
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));