2016-12-15 10 views
0

生徒IDに基づいてレコードを取得したいのですが、次のメソッドを使用しましたが、データが存在する場合でも空を取得するために使用します。 デシベルで私のデータ、マングースのオブジェクトIDでレコードを取得する方法

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

}

私のクエリ、

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 }); 
    }); 
}; 

しかし、私は空の配列を取得していますが、いずれもhelp.Thanksを提案してくださいすることができます。

+0

あなたは 'Invoice'のためのスキーマ定義を含めるようにあなたの質問を編集することはできますか? – JohnnyHK

答えて

0

あなたはこのようなものを使用することができます

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 }); 
    }); 

このバージョンでは、(代わりのexecの)直接のコールバックを使用しています。

約束が好きなら(約束はexecで返されます)、コード例には、Promise#addBack(listener)を使用してクエリ結果リスナーを追加する必要があります。

マングースのドキュメントは、(プロミスケースのために)この例に言及:

// 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) {}); 
関連する問題