情况一: 直接链式,返回name(值为1),不返回_id(值为0)
Model.find().populate('parent',{name: 1,_id: 0})
情况二: 使用通用 CRUD 接口时,部分接口需要特殊处理,用到了setOptions方法,返回name(值为1),不返回_id(值为0)
queryOptions.populate = { path: 'parent', select: {'name': 1,'_id': 0}}
Model.find().setOptions(queryOptions)
1、mongoose中一个数据模型Product(商品)关联另外一个数据模型Brand(品牌)需要使用ref,关联查询使用populate
new mongoose.Schema({
// 商品名称
name: { type: String, required: true, validate: /\S+/ },
// 商品内容
content: { type: String, required: true, validate: /\S+/ },
// 关联的品牌
brand: { type: mongoose.Schema.Types.ObjectId, ref: 'Brand' }
...
new mongoose.Schema({
// 品牌
name: { type: String, required: true, validate: /\S+/ },
// 品牌图片
img: { type: String, required: true, validate: /\S+/ }
...
// 过滤条件
const options = {
sort: { _id: -1 },
page: Number(page),
limit: Number(size),
// populate: ['brand', 'tag'],
populate: [{ path: 'brand', select: 'name' }, 'tag'],//brand返回name字段
select: '-password -content'
};
// 查询参数
const keywordReg = new RegExp(keyword)
const query = {
"$or": [
{ 'name': keywordReg },
{ 'slug': keywordReg },
{ 'description': keywordReg }
]
}
const ones = await Product.paginate(query, options)