Php Mongodb:使用聚合进行筛选以获取最后一条消息
我6小时前就被这个问题困扰了。这真令人沮丧 这是我的收藏: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:
{
"_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)]