如何在mongoose中通过对象id获取记录

时间:2016-12-15 12:58:51

标签: node.js mongoose meanjs

我希望根据学生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 });
  });
};

但是我得到一个空阵列,任何人都可以建议帮助。谢谢。

1 个答案:

答案 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) {});