如何根据具体数据在Mongodb中查询?

时间:2016-01-30 08:34:46

标签: angularjs node.js mongodb

我在Mongodb中有以下模式:

问题架构:

'use strict';

// modules dependencies
var mongoose = require('mongoose'),
    Schema   = mongoose.Schema;

// model
var ProblemSchema = new Schema({

  description: {
    type     : String,
    unique   : false,
    required : false
  },
  creator: {
    type     : Schema.Types.ObjectId,
    unique   : false,
    required : true,
    ref      : 'User'
  },
  idea: {
    type     : Schema.Types.ObjectId,
    unique   : false,
    required : true,
    ref      : 'Idea'
  }
});

mongoose.model('Problem', ProblemSchema);

和Idea架构:

'use strict';

// modules dependencies
var mongoose = require('mongoose'),
    Schema   = mongoose.Schema;

// model
var IdeaSchema = new Schema({
  name: {
    type     : String,
    unique   : true,
    required : true
  },
  description: {
    type     : String,
    unique   : false,
    required : false
  },
  creator: {
    type     : Schema.Types.ObjectId,
    unique   : false,
    required : true,
    ref      : 'User'
  },
  image : String
});

mongoose.model('Idea', IdeaSchema);

在支持中我有以下内容:

exports.getById = function (req, res) {
     Problem.findById({idea:req.params.id}, function (err, problem) {
        if (err) return res.status(400).send(err)

        if (problem) {
          res.send(problem);
        } else {
          res.status(404).send('Problem not found')
        }
      });
    };

我正在尝试根据Idea ID查询问题,但这不起作用,我收到以下错误: 获取http://localhost:3001/api/problems/5698ee90d62061f40bb00a7d 400(错误请求) 我是angularjs和nodejs的新手,希望任何人都可以帮助我?

2 个答案:

答案 0 :(得分:0)

尝试使用findOne而不是findById?

exports.getById = function (req, res) {
 Problem.findOne({idea:req.params.id}, function (err, problem) {
    if (err) return res.status(400).send(err)

    if (problem) {
      res.send(problem);
    } else {
      res.status(404).send('Problem not found')
    }
  });
};

答案 1 :(得分:0)

函数findById表示按_id字段查找单个文档。 findById(id)几乎等同于findOne({ _id: id })。将其替换为findOne,如下所示

exports.getById = function (req, res) {
 Problem.findOne({idea:req.params.id}, function (err, problem) {
    if (err) return res.status(400).send(err)

    if (problem) {
      res.send(problem);
    } else {
      res.status(404).send('Problem not found')
    }
  });
};