如何隐藏通过填充查询提取的特定字段

时间:2017-03-30 05:58:12

标签: mongoose mongoose-schema mongoose-populate

我的架构如下:

order.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var foodtruck = require('./foodtruck.js');
var payment = require('./payment.js');
var Items = require('./items.js');


var order = new Schema({
    order_status:Number,   //0 place 1 accepted 2 cooked 3 cancelled
    foodtruck_id:{type:Schema.Types.ObjectId,ref: 'foodtruck'},
    customer_id:{type: Schema.Types.ObjectId,ref: 'user'},
    items:[{type : Schema.Types.ObjectId, ref : 'items'}],
    user_type:Boolean,
    order_time:Date,
    order_rating:{type:Number,default:5.0},
    order_issue_comments:String,
    order_special_instruction:String,
    order_total:Number,
    order_location:String,
    order_coupon_code:String,
    payment_id:{type:Schema.Types.ObjectId,ref:'payment'}
},{ versionKey: false });


module.exports = mongoose.model('order',order);

foodtruck.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var Items = require('./items.js');


var FoodTruckSchema = new Schema({
    foodtruck_name:String,
    foodtruck_location:String,
    foodtruck_rating:{type:Number,default:5},
    foodtruck_total_votes:{type:Number,default:0},
    foodtruck_tag:String,
    foodtruck_open_status:{type:Number,default:1},   //0 open 1 closed
    foodtruck_starting_timing:String,
    foodtruck_closing_timing:String,
    foodtruck_cusine:String,
    foodtruck_img:String,
    foodtruck_logo:String,
    item_list: [ {type : mongoose.Schema.ObjectId, ref : 'items'}]
},{ versionKey: false });



module.exports = mongoose.model('foodtruck',FoodTruckSchema);

items.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var ItemSchema = new Schema({
    no_of_times_ordered:Number,
    item_name:String,
    item_tag:String,
    item_category:String,
    item_illustrations:[String],
    item_stock:Number,   //0 available 1 last 5 items 2 not available
    item_quantity_ordered:{type:Number,default:0},
    item_discount_price:Number,
    item_price:Number,
    item_img:String,
    no_of_likes:{type:Number,default:0}
},{ versionKey: false });

module.exports = mongoose.model('items',ItemSchema);

现在我的查询如下所示:

var getOrderList = function(req, res) {
    var foodtruck_id = req.body.foodtruck_id;
    if ((foodtruck_id) && (foodtruck_id.trim() != '')) {
        order.find({
            'foodtruck_id': foodtruck_id.trim()
        }).populate('foodtruck_id').populate('customer_id').populate('items').exec(function(err, orderList) {
            if (err) res.json({
                status: '500',
                message: 'There was no order found'
            });
            else {
                res.json({
                    status: '200',
                    message: 'Order list',
                    data: orderList
                });
            }
        });
    } else {
        res.json({
            status: '404',
            message: 'Please enter valid id'
        });
    }
};

回复如下所示: order response

现在,当我为“foodtruck_id”添加populate查询时,它会显示附带的item_list。在填充 foodtruck_id 查询时,有什么办法可以隐藏 item_list 字段吗?

1 个答案:

答案 0 :(得分:0)

1。 填充后,您可以使用' - 排除密钥。

.populate({path:foodtruck_id,select:'-item_list')
  1. 如果您想选择任何特定的关键示例,您只需 foodtruck_name 。 你可以这样做

    .populate({路径:foodtruck_id,选择: 'foodtruck_name')

  2. 要了解有关填充的更多信息,您可以访问mongoose doc