2016-12-15 2 views
0

Je veux obtenir un enregistrement basé sur l'identifiant de l'étudiant et j'ai suivi la méthode suivante, mais j'utilise pour obtenir vide même les données existent. mes données db,Comment obtenir un enregistrement par identifiant d'objet dans mongoose

{ 
"_id" : ObjectId("58526f02b7258b0ec168ee77"), 
"student" : ObjectId("58525c4c8cdabb7841b68163"), 
"updated" : null, 
"record_type" : "Invoice", 
"created" : ISODate("2016-12-15T10:22:58.801Z"), 
"__v" : 0 

}

ma requête,

exports.searchInvoiceByStudent = function (req, res) { 
    var data = {}, 
    id = req.params.id, 
    item = {'record_type':'Invoice','student':id}; 
    Invoice.find(item).exec(function (err, invoice) { 
    if (err) { 
    return err; 
    } 
    if (invoice.length > 0) { 
    data = { status: 'success', error_code: 0, data: invoice }; 
    } else { 
    data = { status: 'fail', error_code: 1, data: invoice }; 
    } 
    res.jsonp({ 'details': invoice }); 
    }); 
}; 

mais je reçois un tableau vide, peut-on s'il vous plaît suggérer help.Thanks.

+0

Pouvez-vous modifier votre question d'inclure la définition du schéma de 'Invoice'? – JohnnyHK

Répondre

0

Vous pouvez utiliser quelque chose comme ceci:

exports.searchInvoiceByStudent = function (req, res) { 
    var data = {}, 
    id = req.params.id, 
    item = {'record_type':'Invoice','student':id}; 
    Invoice.find({student : id, record_type: 'Invoice}, function (err, invoice) { 
    if (err) { 
    return err; 
    } 
    if (invoice.length > 0) { 
    data = { status: 'success', error_code: 0, data: invoice }; 
    } else { 
    data = { status: 'fail', error_code: 1, data: invoice }; 
    } 
    res.jsonp({ 'details': invoice }); 
    }); 

Cette version utilise un rappel directe (au lieu de l'exécutif).

Ou si vous aimez la promesse (la promesse est retournée par exec), vous devez ajouter votre query-result-listener en utilisant Promise#addBack(listener), ce qui manque dans votre exemple de code.

Les mangoustes docs mentionnent cet exemple (pour le cas Promesse):

// using the promise returned from executing a query 
var query = MyModel.find({ name: /john/i }, null, { skip: 10 }); 
var promise = query.exec(); 
promise.addBack(function (err, docs) {});