虽说Mongo是个非关系型数据库,但随着项目功能的拓展,表间关系逐渐变得复杂,我们有时候也需要使用一些类似于关系型数据库的功能来进行数据库操作,这就大大简化了我们的后端代码逻辑,聚合查询就应运而生。
出错
在查询中使用我们自定义的属性匹配文档的时候都没有什么问题,可是在使用_id属性匹配文档时匹配不成功,使用mongoose进行查询时的出错代码:
const mongoose = require('mongoose'), User = mongoose.model('user'); User.aggregate([{ $match: { _id: {$in: ['592eb5c443d5c897d8282c88']}, } }]).exec((err, user) => { console.log(user.length);// 0 });
解决
匹配结果跟预想中的不一致,最后找问题发现是需要把普通的_id字符串转换为MongoDB的ObjectId类型,才能匹配成功。改为:
const mongoose = require('mongoose'), User = mongoose.model('user'); User.aggregate([{ $match: { _id: {$in: [mongoose.Types.ObjectId('592eb5c443d5c897d8282c88')]},// 注意,是这里做了修改 } }]).exec((err, user) => { console.log(user.length);// 1 });
相关文档及问题
Enjoy IT