Distinct () command used with skip () and limit ()

I have these elements in my MongoDB collection:

{x: 1, y: 60, z:100}
{x: 1, y: 60, z:100}
{x: 1, y: 60, z:100}
{x: 2, y: 60, z:100}
{x: 2, y: 60, z:100}
{x: 3, y: 60, z:100}
{x: 4, y: 60, z:100}
{x: 4, y: 60, z:100}
{x: 5, y: 60, z:100}
{x: 6, y: 60, z:100}
{x: 6, y: 60, z:100}
{x: 6, y: 60, z:100}
{x: 7, y: 60, z:100}
{x: 7, y: 60, z:100}

I want to request different values ​​of x (that is, [1, 2, 3, 4, 5, 6, 7] ) ... but I want only a part of them (we can get the same with skipping (a) and limit (b)).

How to do this using the MongoDB java driver (or with spring-data-mongodb, if possible)?

+5
source share
2 answers

in the mongo shell just with the general structure:

db.collection.aggregate([{$group:{_id:'$x'}}, {$skip:3}, {$limit:5}])

for java look: use aggregation structure in java

+8
source

, . mongo.

function getDistinctValues(skip, limit) {

    var q = {x:{$gt: MinKey()}}; // query
    var s = {x:1};               // sort key

    var results = [];

    for(var i = 0; i < skip; i++) {
        var result = db.test.find(q).limit(1).sort(s).toArray()[0];
        if(!result) {
            return results;
        }
        q.x.$gt = result.x;
    }

    for(var i = 0; i < limit; i++) {
        var result = db.test.find(q).limit(1).sort(s).toArray()[0];
        if(!result) {
            break;
        }
        results.push(result.x);
        q.x.$gt = result.x;
    }

    return results;

}

, , , . , , . , , , .

"" . mongo.

function getDistinctValues(limit, lastValue) {

    var q = {x:{$gt: lastValue === undefined ? MinKey() : lastValue}}; // query
    var s = {x:1};               // sort key

    var results = [];

    for(var i = 0; i < limit; i++) {
        var result = db.test.find(q).limit(1).sort(s).toArray()[0];
        if(!result) {
            break;
        }
        results.push(result.x);
        q.x.$gt = result.x;
    }

    return results;

}

, , $sort $group. .

+1

All Articles