2017-10-03 1 views
-1

I ont le réseau schéma [objet]:mangouste, comment interroger la valeur maximale ou minimale dans l'un tableau d'objet et renvoyer l'objet

var operation = new Schema({ 
    name:{type:String}, 
    number:[Number], 
}); 

var Info = new Schema({ 
    serialNumber:{type:Number} 
    operation:[operation], 
}); 

l'exemple de données:

{ 
    serialNumber: 25, 
    operation:[ 
    { 
     name:'jack', 
     number:1, 
    },{ 
     name:'may', 
     number:2, 
    },{ 
     name:'alexander ', 
     number:3, 
    }, 
    ] 
} 

comment interroger la collection lorsque serialNumber: 25 & & operation.number est maximum et renvoyer l'objet,

Dans ce cas, sera retur n ce

{ 
    name:'alexander ', 
    number:3, 
}, 

J'essayer aggregate()sort()

mais aggregate() ne pouvez pas sélectionner une condition (ex: serialNumber: 25) et ne peut pas revenir seul objet, find().sort() peut sélectionner une condition, mais impossible de trier les objets de tableau interne.

+2

Vous devez montrer du travail ici. – ThrowsException

+0

Désolé, j'ai ajouté une description. –

Répondre

1

Vous devriez probablement revenir en arrière lire la documentation sur le pipeline d'agrégation puisque vous semblez être trompé sur la façon dont il est utilisé et ce qu'il fait. Les étapes pour cela en utilisant le pipeline d'agrégation sont un peu longues mais vous pouvez faire tout cela assez facilement. Il y a probablement quelques raccourcis à prendre mais voici la version longue.

db.getCollection('bar').aggregate([ 
    {$match: {serialNumber: <number>}}, //use match to find based on serial number 
    {$unwind: '$operation'}, //unwind the operation array 
    {$sort: {'operation.number': -1}}, //sort operation number desc 
    {$limit: 1}, //get only first item 
    {$project: {_id: 0, name: '$operation.name', number: '$operation.number'}} //project the object and attributes you want 
]) 

Vous pouvez alors prendre le premier élément hors du tableau results ou regarder en retour un curseur dans le cadre d'agrégation. Stackoverflow n'est pas un service d'écriture de code.

+0

merci, c'est du travail. –

+0

quel est le _id: 0? –