Node.js:具有多个条件的MongoDB中的范围查询,使用Mongoose

时间:2018-04-18 17:15:03

标签: mongodb mongoose

我正在尝试使用Mongoose在MongoDB中实现“范围查询”,按“条件”排序,然后按“_id”排序。 我想向客户端返回一个包含两个游标的字符串。

我试图使用注释块2来实现类似下面的代码。但是,我收到了一个错误。甚至没有打印日志消息。

在我的测试中,查询为空,因为集合为空。 我怀疑我没有得到光标,所以我用“块1”而不是块2进行了测试,并且它有效。 但是因为我需要最后一个光标,我想我真正需要使用的是.toArray方法,对吗?

我做错了什么?

    Feed.find({
        "criteria": {$lt: cursorCriteria},
        "_id": {$lt: cursorId}
    })
    .sort({ 
        criteria: -1,
        _id: -1 
    })
    .limit( 50 )

    // block 1: just to test if I'm getting the cursor 
    .then( items => {
        items.forEach( function(item) {
            console.log('an item');
        })
    })

    /* block 2:  if I try this block instead of block 1, I get an error
    .toArray( items => {
        if (items.length > 0) {
            console.log('not empty);
        } else {
            console.log('empty');
        }
        var nextCursor = '${item.criteria}_${item._id}';
        res.status(200).json({item, nextCursor});
    })
    */

1 个答案:

答案 0 :(得分:0)

Mongoose没有toArray()方法 这很好用:

 .then( items => {
                if (items.length > 0) {
                    console.log('not empty');
                } else {
                    console.log('empty');
                }
                var nextCursor;
                if (items.length > 0) {
                    nextCursor = '' + items[items.length-1].criteria + "_" + items[items.length-1]._id;
                } else {
                    nextCursor = '';
                }
                res.status(200).json({items, nextCursor});
            })