Php mongodb会话系统

Php mongodb会话系统,php,mongodb,Php,Mongodb,我正在mongodb上实现一个非常简单的对话系统 我的想法应该是,当我打开一个车队时,它应该显示发送和接收的消息。到目前为止还可以,而且应该很容易,通过使用以下伪代码这样的简单查询: (from "my_id" AND to "friend_id") OR (from "friend_id" AND to "my_id") 这应该非常简单明了,但使用mongodb(我来自mysql)查询对我来说太复杂了 我正在尝试这个,但它根本不起作用,也无法找出错误所在 $cursor =$collecti

我正在mongodb上实现一个非常简单的对话系统

我的想法应该是,当我打开一个车队时,它应该显示发送和接收的消息。到目前为止还可以,而且应该很容易,通过使用以下伪代码这样的简单查询:

(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));
这没有任何回报。。。。哪里错了


提前感谢。

请查看此页面,了解如何执行高级MongoDB查询:

您可以在运算符中组合使用
$和
以及
$来获得所需的内容。使用mongo shell,您的查询将如下所示:

db.yourCollectionName.find({$and: {from: {$in: ["toUser", "loggedOnUser"]}}, {to: {$in: ["toUser", "loggedOnUser"]}}})
$cursor = $collection->find(
    array('$or' => 
        array(
            array("from"=>"$profile", "to"=>"$loggeduser"),
            array("to"=>"$profile", "from"=>"$loggeduser")
        )
    )
) ->limit(50)->sort(array('date' => -1));
我相信这也会给你带来同等的好处:

db.yourCollectionName.find({$and: {$or: [{from: "toUser"}, {to: "toUser"}]}}, {$or: [{from: "loggedOnUser"}, {to: "loggedOnUser"}]}}})
从这里开始,您需要将上述内容转换为您正在使用的语言/DSL,并按日期排序

在代码中,您不需要使用
($and=>array())
包装要查找的每个对象。删除它们,使其看起来像这样:

db.yourCollectionName.find({$and: {from: {$in: ["toUser", "loggedOnUser"]}}, {to: {$in: ["toUser", "loggedOnUser"]}}})
$cursor = $collection->find(
    array('$or' => 
        array(
            array("from"=>"$profile", "to"=>"$loggeduser"),
            array("to"=>"$profile", "from"=>"$loggeduser")
        )
    )
) ->limit(50)->sort(array('date' => -1));

你用哪种语言?你是想用Mongo shell直接查询吗?啊,忘了提一下。。。这是PHPyea,我知道,这就是我的代码,我在某种程度上把它翻译成PHP mongo驱动程序代码,但肯定有某种我看不到的错误。。。。也许有人会注意到。。。谢谢你的回答!再看看我写的东西。从每个嵌套数组中删除额外的$and。您不需要($and=>array())包装每个对象。。。我相信,你只需要那美元。