今天在学习使用Mongoose
的时候,遇到一个很奇葩的问题,首先,发个代码热热身:
const mongoose = require('mongoose');
mongoose.Promise = require('bluebird');
mongoose.connect('mongodb://localhost:27017/test');
const test = mongoose.model('test', mongoose.Schema({
name: String
}));
router.get('/', async function (ctx, next) {
const data = await test.find({});
console.log(data);
ctx.response.body = { data };
if (next) {
await next;
}
});
这个代码看了好多次,没有任何毛病,但是它一直输出一个空数组,在MongoDB
查询数据如下:
在我的不懈努力下,最后发现
mongoose
在创建model
的时候,会自动添加s
,意思就是我虽然写的是从集合test
中获取数据,但是它自动跑去tests
里面获取,所以一直是空数组,刚开始还是有点不信的,试着又在数据库中建了一个tests
表,写入了一条数据:呃呃,数据真的被获取到了!!!
如果你不想要加s
这个过程,那么可以加一个collection
:
const test = mongoose.model('test', mongoose.Schema(
{ name: String },
{ collection: 'test' }
));