findOne没有达到我知道的价值

时间:2018-07-30 00:03:08

标签: javascript node.js mongodb mongoose mongoose-schema

所以我知道我当前的ID在我的数据库中,但是findOne却没有找到它。当我控制台日志req.params.video_id时,它显示正确的ID。我该如何开始调试呢?我通过MLAB UI验证了该视频是否在我的数据库中。

VideoSchema代码段

video: {
    type: Schema.Types.ObjectId,
    ref: "users"
  }

API路由

Video.findOne({ video: req.params.video_id })
      .then(video => {
        res.json(video);
      })
      .catch(err => {
        res.status(404).json({ video: "Video doesn't exist" });
      });

2 个答案:

答案 0 :(得分:0)

由于视频模式中的 type 被定义为ObjectId,请尝试使用ObjectId类型进行搜索,如果有任何结果,请尝试

var ObjectId = require('mongoose').Types.ObjectId; 
Video.findOne({ video: new ObjectId(req.params.video_id) })

答案 1 :(得分:0)

  

所以我知道我当前的ID在我的数据库中,但是findOne没有找到它。

这是因为video的类型为Schema.Types.ObjectId。但是您查询时没有将其强制转换为ObjectId

可能会导致的铸造

'use strict';

let mongoose = require('mongoose');

Video.findOne({
  video: mongoose.Types.ObjectId(req.params.video_id)
}).then(video => {
  res.json(video);
}).catch(err => {
  res.status(404).json({
    video: "Video doesn't exist"
  });
});