Estoy teniendo un montón de dificultad en la resolución de este mongodb (mangosta) problema.

Hay este esquema de ‘Recomendar’ (nombre de usuario, roomId, ll y fecha) y su colección contiene la recomendación de usuario.

Necesito para obtener una lista de los más recomendados de habitaciones (por roomId). A continuación es el esquema y mi trató de solución con la mangosta consulta.

var recommendSchema = mongoose.Schema({
    username: String,
    roomId: String,
    ll: { type: { type: String }, coordinates: [ ] },
    date: Date
})
recommendSchema.index({ ll: '2dsphere' });

var Recommend = mongoose.model('Recommend', recommendSchema);
Recommend.aggregate(
        {   
          $group: 
            { 
                _id: '$roomId', 
                recommendCount: { $sum: 1 } 
            }
        },
        function (err, res) {
            if (err) return handleError(err);
            var resultSet = res.sort({'recommendCount': 'desc'});

        }
    );
InformationsquelleAutor Renan Basso | 2014-10-29

1 Comentario

  1. 56

    Los resultados devueltos a partir de la agregación de la tubería son simplemente objetos. Para hacer la clasificación como una fase de canalización, no como una operación independiente:

    Recommend.aggregate(
        [
            //Grouping pipeline
            { "$group": { 
                "_id": '$roomId', 
                "recommendCount": { "$sum": 1 }
            }},
            //Sorting pipeline
            { "$sort": { "recommendCount": -1 } },
            //Optionally limit results
            { "$limit": 5 }
        ],
        function(err,result) {
    
           //Result is an array of documents
        }
    );

    Así que hay varias los operadores de tuberías que puede ser utilizado para $group o $sort o $limit y otras cosas así. Estos pueden ser presentados en cualquier orden, y tantas veces como sea necesario. Sólo la comprensión de que el «pipeline» de la etapa de los flujos de los resultados en la siguiente acción.

Dejar respuesta

Please enter your comment!
Please enter your name here