2016-04-05 13 views
0

Während ich Debugging Problem, fand ich, dass Mongoose Sortierung nicht richtig funktioniert. Ich entfernte unseren Code und machte einen einfachen Test. Sie können es ausführen, um zu sehen, dass es fehlschlägt.Mongoose Population Sortierung funktioniert nicht richtig

Vielleicht hat jemand es schon einmal gesehen? Vielleicht fehlt mir etwas?

danke für Ihre Hilfe!

var mongoose = require('mongoose'); 
var assert = require('assert'); 

mongoose.set('debug', true); 
mongoose.connect('mongodb://localhost/test'); 

var CarSchema = new mongoose.Schema({ 
    name: String 
}); 
mongoose.model('Car', CarSchema); 

var CarsSchema = new mongoose.Schema({ 
    car: { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: 'Car' 
    }, 
    quantity: Number 
}); 

var OrderSchema = new mongoose.Schema({ 
    suborders: [CarsSchema] 
}); 
mongoose.model('Cars', OrderSchema); 

var Car = mongoose.model('Car'); 
var Cars = mongoose.model('Cars'); 

Car.create([ 
    { 
     name: 'Tesla' 
    }, 
    { 
     name: 'BMW' 
    } 
], function (err, objs) { 

    Cars.create({ 
     suborders: [ 
      { 
       car: objs[1]._id, //BMW 
       quantity: 1 
      }, { 
       car: objs[0]._id, //Tesla 
       quantity: 2 
      } 
     ] 
    }, function (err, order) { 

     Cars.findById(order._id) 
      .populate({ 
       path: 'suborders.car', 
       options: { 
        sort: '-name' 
       } 
      }).exec(function (err, cars) { 

      assert.equal(cars.suborders[0].car.name, 'Tesla', 'DESC: 0 should be Tesla'); 
      assert.equal(cars.suborders[1].car.name, 'BMW', 'DESC: 1 should be BMW'); 

      assert.equal(cars.suborders[0].quantity, 2, 'DESC: Tesla quantity should be 2'); 
      assert.equal(cars.suborders[1].quantity, 1, 'DESC: BMW quantity should be 1'); 

     }); 
    }); 
}); 

Antwort

1

Es ist ein bestätigter Mungo Fehler here, und sagte nicht einfach zu beheben. :(

Der Schlüssel Phänomene ersten beiden Behauptungen vergangen ist, scheiterte dann in der dritten Behauptung.

Vielleicht können Sie Schema-Design ändern oder so etwas wie ‚Mungo Subdokumente Sortierung‘ suchen. Here ein Beispiel aggregate Anwendung ist.

1

Leider können Sie nicht bevölkerte Felder in mongooose/mongodb sortieren. Tatsächlich sind die besiedelten Felder hier praktisch vorhanden, was durch Mungo möglich gemacht wird. Aber sie sind in der eigentlichen Datenbank nicht vorhanden (da Mongo keine Joins unterstützt), und dort wird die Sortierung tatsächlich angewendet.

Also müssen Sie das Ergebnis-Array manuell sortieren, indem Sie die eingebaute JavaScript-Funktion Array.sort (compare) oder eines Ihrer bevorzugten benötigten Module verwenden.

0

ich denke, es für Sie hilfreich sein kann, weil in Mungo Optionen bevölkern die Reihenfolge richtig sortieren liefern

Cars.findById(order._id) 
       .populate({ 
        path: 'suborders.car', 
        options: { 
         sort: {name:-1} 
        } 
       }).exec(function (err, cars) { 
});