我正在mongodb上实现非常简单的会话系统。
这个想法应该是当我打开一个convo时,它应该显示发送和接收的消息。到目前为止还可以,通过使用像这样的伪代码这样的简单查询非常简单:
(from "my_id" AND to "friend_id") OR (from "friend_id" AND to "my_id")
这应该是非常简单和简单的,但是使用mongodb查询看起来很复杂(我来自mysql)。
我正在尝试这个,但它根本不起作用,无法找出错误的位置。
$cursor =$collection->find
(
array('$or' =>
array('$and' => array("from"=>"$profile", "to"=>"$loggeduser")),
array('$and' => array("to"=>"$profile", "from"=>"$loggeduser"))
)
)->limit(50)->sort(array('date' => -1));
这什么都不返回......哪里出错了?
提前致谢。
答案 0 :(得分:1)
请查看此页面,了解如何执行高级MongoDB查询:http://www.mongodb.org/display/DOCS/Advanced+Queries
您可以结合使用$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));