情况一: 直接链式,返回name(值为1),不返回_id(值为0)

    1. Model.find().populate('parent',{name: 1,_id: 0})

    情况二: 使用通用 CRUD 接口时,部分接口需要特殊处理,用到了setOptions方法,返回name(值为1),不返回_id(值为0)

    1. queryOptions.populate = { path: 'parent', select: {'name': 1,'_id': 0}}
    2. Model.find().setOptions(queryOptions)

    1、mongoose中一个数据模型Product(商品)关联另外一个数据模型Brand(品牌)需要使用ref,关联查询使用populate

    1. new mongoose.Schema({
    2. // 商品名称
    3. name: { type: String, required: true, validate: /\S+/ },
    4. // 商品内容
    5. content: { type: String, required: true, validate: /\S+/ },
    6. // 关联的品牌
    7. brand: { type: mongoose.Schema.Types.ObjectId, ref: 'Brand' }
    8. ...
    1. new mongoose.Schema({
    2. // 品牌
    3. name: { type: String, required: true, validate: /\S+/ },
    4. // 品牌图片
    5. img: { type: String, required: true, validate: /\S+/ }
    6. ...
    1. // 过滤条件
    2. const options = {
    3. sort: { _id: -1 },
    4. page: Number(page),
    5. limit: Number(size),
    6. // populate: ['brand', 'tag'],
    7. populate: [{ path: 'brand', select: 'name' }, 'tag'],//brand返回name字段
    8. select: '-password -content'
    9. };
    10. // 查询参数
    11. const keywordReg = new RegExp(keyword)
    12. const query = {
    13. "$or": [
    14. { 'name': keywordReg },
    15. { 'slug': keywordReg },
    16. { 'description': keywordReg }
    17. ]
    18. }
    19. const ones = await Product.paginate(query, options)