今天在使用 MongoDB + NodeJS + mongoose 学习时发现一个现象。
- find 方法返回的类型一般为一个数组,但有时候会返回空。
代码(部分)
- 定义类
//db.js 中引入了 mongoose 模块和 mongodb 的连接配置
var mongoose = require('../common/db');
//定义
var movie = new mongoose.Schema({
movieName: String,
movieImg: String,
movieVideo: String,
movieDownload: String,
movieTime: String,
movieNumSuppose: Number,
movieNumDownload: Number,
movieMainPage: Boolean,
});
//静态方法
movie.statics.findById = function (movie_id, callBack) {
this.find({_id: movie_id}, callBack);
};
movie.statics.findByName = function (movie_name, callBack) {
this.find({movieName: movie_name}, callBack);
};
var movieModel = mongoose.model('movie', movie);
module.exports = movieModel;
- 执行类
router.post('/support', function (req, res, next) {
movie.findById(req.body.movie_id, function (err, data) {
res.json({status:1, data :data});
})
}
POSTMAN 调试
- 通过 _id 查询,记录存在的情况下,返回对象数组,可以取到 data.length 值为 1。
- 通过 _id 查询,记录不存在的情况下,返回空。取 data.length 会报错。判断 data == null 的值为 true
- 通过非 _id 字段查询,以 movie_name 为例,记录存在的情况下,返回对象数组。可以取到 data.length 值为 1。
- 通过非 _id 字段查询。以 movie_name 为例。记录不存在的情况下,返回空数组,可以取到 data.length 值为 0