我希望根据学生ID获取记录,然后我使用以下方法,但即使数据存在,我也会变空。 我在db中的数据,
{
"_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 });
});
};
但是我得到一个空阵列,任何人都可以建议帮助。谢谢。
答案 0 :(得分: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)
添加你的查询结果监听器,这在你的代码示例中是缺失的。
mongoose docs提到了这个例子(对于promise-case):
// 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) {});