Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mongodb:使用聚合进行筛选以获取最后一条消息_Php_Mongodb - Fatal编程技术网

Php Mongodb:使用聚合进行筛选以获取最后一条消息

Php Mongodb:使用聚合进行筛选以获取最后一条消息,php,mongodb,Php,Mongodb,我6小时前就被这个问题困扰了。这真令人沮丧 这是我的收藏: { "_id" : ObjectId("52fbcd2aa0a9210007000038"), "from_group" : "52faa17fa0a921740c000046", "to_group" : "52faa173a0a921c807000037", "message" : "How are you?", "sent_time" : ISODate("2014-02-12T19:36:

我6小时前就被这个问题困扰了。这真令人沮丧

这是我的收藏:

{
    "_id" : ObjectId("52fbcd2aa0a9210007000038"),
    "from_group" : "52faa17fa0a921740c000046",
    "to_group" : "52faa173a0a921c807000037",
    "message" : "How are you?",
    "sent_time" : ISODate("2014-02-12T19:36:10.000Z"),
}
{
    "_id" : ObjectId("52fbcd39a0a921641200002c"),
    "from_group" : "52faa173a0a921c807000037",
    "to_group" : "52faa17fa0a921740c000046",
    "message" : "Fine, and you?",
    "sent_time" : ISODate("2014-02-12T19:36:25.000Z"),
}
{
    "_id" : ObjectId("52fbcd4ea0a9210007000039"),
    "from_id" : "1305426002",
    "from_group" : "52faa17fa0a921740c000046",
    "to_group" : "52faa173a0a921c807000037",
    "message" : "Fine",
    "sent_time" : ISODate("2014-02-12T19:36:46.000Z"),
}
{
    "_id" : ObjectId("52fbfa2aa0a921641200002d"),
    "from_group" : "52fbfa1ca0a921f81300002a",
    "to_group" : "52faa173a0a921c807000037",
    "message" : "Test... 1.. 2.. 3..",
    "sent_time" : ISODate("2014-02-12T22:48:10.000Z"),
}
这是我的代码:

    function getLastMessage($hangoutA, $hangoutB) {
        $result = $mongodb->messages->aggregate(
        ['$match' =>
            ['$or' =>
                [
                    array('from_group' => $hangoutA),
                    array('from_group' => $hangoutB),
                    array('to_group'   => $hangoutA),
                    array('to_group'   => $hangoutB),
                ]
            ]
        ],
        [ '$group' => [
            '_id' => null,
            'message' => ['$last' => '$message']
        ]
        ]);
        $message = $result;
        return $message;

}
$first = getLastMessage("52faa173a0a921c807000037", "52fbfa1ca0a921f81300002a");
$second = getLastMessage("52faa173a0a921c807000037", "52faa17fa0a921740c000046");
$first和$second返回以下内容:

数组([result]=>Array([0]=>Array([\u id]=>[message]=>Test…1..2..3..])[ok]=>1)

$first的问题是,我期望得到的信息是:“很好”。 我对$second的期望是:“Test…1..2..3..”,这样就可以了


你能帮我解决这个问题吗?

问题是我试图检查所有的组合。这是一个st*pid错误

为了得到预期的结果,我更改了以下内容:

                array('from_group' => $hangoutA),
                array('from_group' => $hangoutB),
                array('to_group'   => $hangoutA),
                array('to_group'   => $hangoutB),
为此

                array('to_group'   => $hangoutA),
                array('to_group'   => $hangoutB),
简单,对吗


对不起

对我来说,这似乎是一个不需要聚合框架的简单查询。(您是否出于某种特定原因使用聚合框架?)

我不喜欢php,所以我将使用mongo控制台语法

要查找发送到组的最后一封邮件,请执行以下操作:

db.messages.find({"to_group" : groupID}).sort({"sent_time" : -1}).limit(1)
要查找两个组之间的最后一条消息,请执行以下操作:

db.messages.find({"$or" : [{"to_group" : groupA, "from_group" : groupB}, {"to_group" : groupB, "from_group" : groupA}]}).sort({"sent_time" : -1}).limit(1)

这可能不是你想要的。第一种情况返回最后一条消息(从组==hangoutA)或(从组==hangoutB)或(到组==hangoutA)或(到组==hangoutB)。我想你想要的是[(从组==hangoutA)和(到组==hangoutB)]或[(从组==hangoutB)和(到组==hangoutA)]