MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Agréger les résultats MongoDB par date ObjectId

Mise à jour :Il existe un moyen intégré de le faire maintenant, voir https://stackoverflow.com/a /51766657/295687

Il n'y a aucun moyen d'accomplir ce que vous demandez avec le framework d'agrégation de mongodb, car il n'y a pas d'opérateur d'agrégation qui peut transformer les ObjectId en quelque chose comme une date (il y a un JIRAticket , pourtant). Cependant, vous devriez pouvoir accomplir ce que vous voulez en utilisant map-reduce :

// map function
function domap() {
    // turn ObjectId --> ISODate
    var date = this._id.getTimestamp();
    // format the date however you want
    var year = date.getFullYear();
    var month = date.getMonth();
    var day = date.getDate();

    // yields date string as key, entire document as value
    emit(year+"-"+month+"-"+day, this);
}

// reduce function
function doreduce(datestring, docs) {
    return {"date":datestring, "docs":docs};
}