在mongoose中使用distinct,or,skip,limit和AND sort

时间:2016-04-17 07:10:45

标签: node.js mongodb mongoose

我正在尝试查找按时间戳排序的不同会话,条件是@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; } }); } senderuserIdrecipient。我认为实现这一目标的唯一方法是使用聚合。这就是我现在所拥有的:

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

1 个答案:

答案 0 :(得分:-1)

通过了解如何使用mongoose的find,可以实现其中一些(如果不是全部)。

然后,您应该订购这些命令。正确的顺序是:

  • sortlimit选项命令
  • 根据{{​​3}} ,
  • $or条件命令
  • 最后,您必须将distinct作为单独的语句,因为它返回this,并且不可链接。

你最终会得到这个理论上的代码

Notification.find({
    $or: [
        sender: userId,
        recipient: userId
    ]
}, undefined, {
    skip: (page - 1) * LIMIT,
    limit: LIMIT,
    sort: {
        timestamp: 1
    }
}).distinct('conversationId', (err, results) => {
    // ***
});

我鼓励你测试它,但我不保证任何结果。希望它有所帮助;)