Я хочу каждый n-й документ из базы данных MongoDB - PullRequest
1 голос
/ 06 мая 2019

это моя коллекция из примерно 250 тыс. Документов:

{ 
    "_id" : ObjectId("5ccfbae47dd9094e30998954"), 
    "date" : "05/02/2019"
}

{ 
    "_id" : ObjectId("5ccfbaff7dd9094e30998956"), 
    "date" : "05/04/2019"
}

{ 
    "_id" : ObjectId("5ccfd7dc6432426a9b4a4785"), 
    "date" : "05/06/2019"
}

{ 
    "_id" : ObjectId("5ccfd8d96432426a9b4a4788"), 
    "date" : "05/08/2019"
}

{ 
    "_id" : ObjectId("5cd01ab6c3bb270aa5c12ade"), 
    "date" : "05/04/2019"
}

{ 
    "_id" : ObjectId("5cd0227abf056b4b82d46ba9"), 
    "date" : "05/06/2019"
}

у меня в коллекциях более 250 тыс. Документов.Я должен получить все n-ые данные из моей коллекции, чтобы это не заняло больше времени.как Exp: - я хочу каждый 2-й документ из коллекции, и ожидаемые документы, как,

{ 
    "_id" : ObjectId("5ccfbaff7dd9094e30998956"), 
    "date" : "05/04/2019"
}

{ 
    "_id" : ObjectId("5ccfd8d96432426a9b4a4788"), 
    "date" : "05/08/2019"
}

{ 
    "_id" : ObjectId("5cd0227abf056b4b82d46ba9"), 
    "date" : "05/06/2019"
}

есть ли решение этой проблемы?

1 Ответ

1 голос
/ 06 мая 2019

Вы можете попробовать, как показано ниже:

db.collection.aggregate([
    {
        "$group": { 
            "_id": null,
            data: { $push: "$$ROOT"}
        }     
    },
    {
        $project: {
            requiredResult: {
                $map: {
                    input: { $range: [ 0, { $size: "$data" }, 2 ] },    // here you can replace 2 with any number (N)                        
                    as: "index",
                    in: { $arrayElemAt: [ "$data", "$$index" ] }
                }
            }
        }
    }
])
...