有消息的集合:MongoDB中獲得最後的組合,聚合框架
{
"date": NumberLong(1421134514),
"sender": "53172480f9cd0e682840b9f7",
"recipient": "52f37fbaf9cd0e02773c97b1",
"isRead": false,
"_id": "54b4cab2f6a48ce34f8b5a75",
"text": "Hello!"
},
{
"date": NumberLong(1421135561),
"sender": "53172480f9cd0e682840b9f7",
"recipient": "52f37fbaf9cd0e02773c97b1",
"isRead": false,
"_id": "54b4cec9f6a48ce34f8b6429",
"text": "Hello 2!"
},
{
"date": NumberLong(1421135618),
"sender": "53072122f9cd0ee76306dc5a",
"recipient": "52f37fbaf9cd0e02773c97b1",
"isRead": false,
"_id": "54b4cf02f6a48ce54f8b62f9",
"text": "Hello 3!"
},
{
"date": NumberLong(1421136457),
"sender": "52f37fbaf9cd0e02773c97b1",
"recipient": "52ea178ff9cd0e9f24d776b4",
"isRead": false,
"_id": "54b4d249f6a48ce54f8b6b9f"
"text": "Hello 4!"
}
有必要選擇後者對話,在當前用戶是發送者或接收者。
例如,對於ID ='52f37fbaf9cd0e02773c97b1'的用戶,應該獲得3條記錄。
事實證明,建立兩個單獨的查詢:
$result = \DB::$connection->message->aggregate(array(
array('$match' => array('sender' => \Core::getModule('users')->user->_id)),
array('$group' => array('_id' => '$recipient')),
));
$result2 = \DB::$connection->message->aggregate(array(
array('$match' => array('recipient' => \Core::getModule('users')->user->_id)),
array('$group' => array('_id' => '$sender')),
));
是否有可能這兩個查詢以某種方式合併成一個,並按日期排序記錄?
不清楚你在問什麼。這兩個聚合查詢將只返回一個具有單一「_id」值的元素。你想做什麼? –
選擇帶有唯一對話者的此人的最新帖子 – jeka5555
我需要顯示參與用戶的對話列表,並按日期最後一則消息對其進行排序。 – jeka5555