mongodb会话系统

时间:2012-03-08 17:22:16

标签: php mongodb

我正在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));

这什么都不返回......哪里出错了?

提前致谢。

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));