我正在尝试查找按时间戳排序的不同会话,条件是@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.your_fragment_layout, container, false);
// Handle back press action when action mode is on.
v.setFocusableInTouchMode(true);
v.requestFocus();
v.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (haveToDoSomething) {
// Do something
}
else return false;
}
return true;
}
});
}
为sender
或userId
为recipient
。我认为实现这一目标的唯一方法是使用聚合。这就是我现在所拥有的:
userId
但是,我收到了“双回调”错误(因此我注意到了有问题的Notification.aggregate([
// { $or: [ { $sender: userId }, { $recipient: userId } ] },
{ $group: { _id: '$conversationId' } },
{ $skip: (page - 1) * LIMIT },
{ $limit: LIMIT },
{ $sort: { timestamp: 1 } }
], function (err, result) {
// console.log(result);
return result;
});
行。
伪代码(我想要实现的)是:
$or
答案 0 :(得分:-1)
通过了解如何使用mongoose的find
,可以实现其中一些(如果不是全部)。
然后,您应该订购这些命令。正确的顺序是:
sort
和limit
是选项命令$or
是条件命令
distinct
作为单独的语句,因为它返回this,并且不可链接。你最终会得到这个理论上的代码
Notification.find({
$or: [
sender: userId,
recipient: userId
]
}, undefined, {
skip: (page - 1) * LIMIT,
limit: LIMIT,
sort: {
timestamp: 1
}
}).distinct('conversationId', (err, results) => {
// ***
});
我鼓励你测试它,但我不保证任何结果。希望它有所帮助;)