javascript mongoose“findById”返回具有有效ID的空值

jvlzgdj9  于 2023-01-29  发布在  Java
关注(0)|答案(1)|浏览(142)
    • 编辑[解决]:**

我连错数据库了...
我变了
var dbURI = 'mongodb://localhost/wifiplz'

var dbURI = 'mongodb://localhost/wifiPlz'
所以这一切都是由于一个错字(未大写的p)。任何有这种问题的人都要确保你连接到了正确的数据库!
下面是我的模式文件(location.js):

var mongoose = require('mongoose');

var openingTimeSchema = new mongoose.Schema({
  days: {type: String, required: true},
  opening: String,
  closing: String,
  closed: {type: Boolean, required: true}
});

var reviewSchema = new mongoose.Schema({
  author: String,
  rating: {type: Number, min: 0, max: 5, required: true},
  createdOn: {type: Date, default: Date.now},
  reviewText: String
});

var locationSchema = new mongoose.Schema({
  name: {type: String, required: true},
  address: {type: String, required: true},
  rating: {type: Number, default: 0, min: 0, max: 5},
  facilities: [String],
  coords: {type: [Number], index: '2dsphere'},
  openingTimes: [openingTimeSchema],
  reviews: [reviewSchema]
});

// compiling schema as 'Location' model
mongoose.model('Location', locationSchema);

在我的路由中,我将路由Map到相应的控制器:

router.get('/locations/:locationId', locationsCtrl.locationRead);

在我的控制器(locationsCtrl.js)中,我尝试通过id查找位置:

var mongoose = require('mongoose');
var Location = mongoose.model('Location');

module.exports.locationRead = function(req, res) {
  Location
    .findById(req.params.locationId)
    .exec(function(err, location) {
      if (err) throw err;

      res.status(200);
      res.json(location); // returns null
    });
}

当我测试这个的时候,我总是得到有效的id的null。希望能有一些关于原因的见解。谢谢。
编辑:
使用mongoshow collections检查我的计算机上的集合的名称,我得到locations作为集合名称。这是预期的。尽管指定mongoose.model('Location', locationSchema, 'locations')没有任何效果。

bqucvtff

bqucvtff1#

进行以下更改:

var mongoose = require('mongoose');
var Location = mongoose.model('Location');

module.exports.locationRead = function(req, res) {
  Location
    .findOne({_id: req.params.locationId}, function (err, location){
      if (err) throw err;
      res.status(200);
      res.json(location); // returns null
    });
}

_id可以是你的任意字段,所以用_id替换你的db字段,但是要确保这个字段本质上是主字段或者是唯一的。如果不是,在这个字段上创建一个索引。

相关问题