Saltar al contenido

como ordenar array dentro del registro de colección en mongoDB

Esta es la respuesta más acertada que encomtrarás aportar, pero obsérvala detenidamente y analiza si es compatible a tu trabajo.

Solución:

Tendrá que manipular el incrustado array en el código de su aplicación o utilizando el nuevo marco de agregación en MongoDB 2.2.

Ejemplo de agregación en el mongo cascarón:

db.students.aggregate(
    // Initial document match (uses index, if a suitable one is available)
     $match: 
        _id : 1
    ,

    // Expand the scores array into a stream of documents
     $unwind: '$scores' ,

    // Filter to 'homework' scores 
     $match: 
        'scores.type': 'homework'
    ,

    // Sort in descending order
     $sort: 
        'scores.score': -1
    
)

Salida de muestra:


    "result" : [
        
            "_id" : 1,
            "name" : "Aurelia Menendez",
            "scores" : 
                "type" : "homework",
                "score" : 71.76133439165544
            
        ,
        
            "_id" : 1,
            "name" : "Aurelia Menendez",
            "scores" : 
                "type" : "homework",
                "score" : 34.85718117893772
            
        
    ],
    "ok" : 1

Así es como podríamos resolver esto con JS y mongo console:

db.students.find("scores.type": "homework").forEach(
  function(s)
    var sortedScores = s.scores.sort(
      function(a, b)
        return a.score

Dado que esta pregunta se puede manejar de diferentes maneras, quiero decir que otra solución es "insertar y ordenar", de esta manera obtendrá el Ordenado array en este momento harás un Find().

Considere estos datos:


   "_id" : 5,
   "quizzes" : [
       "wk": 1, "score" : 10 ,
       "wk": 2, "score" : 8 ,
       "wk": 3, "score" : 5 ,
       "wk": 4, "score" : 6 
   ]

Aquí actualizaremos el Documento, haremos el Sort.

db.students.update(
    _id: 5 ,
   
     $push: 
       quizzes: 
          $each: [  wk: 5, score: 8 ,  wk: 6, score: 7 ,  wk: 7, score: 6  ],
          $sort:  score: -1 ,
          $slice: 3 // keep the first 3 values
       
     
   
)

El resultado es:


  "_id" : 5,
  "quizzes" : [
      "wk" : 1, "score" : 10 ,
      "wk" : 2, "score" : 8 ,
      "wk" : 5, "score" : 8 
  ]

Documentación: https://docs.mongodb.com/manual/reference/operator/update/sort/#up._S_sort

Nos encantaría que puedieras dar difusión a este post si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *