【问题标题】:How to hide specific fields which are extracted via populate query如何隐藏通过填充查询提取的特定字段
【发布时间】:2017-08-23 21:27:03
【问题描述】:

我的架构如下:

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'
        });
    }
};

响应如下:

现在,当我对“foodtruck_id”进行填充查询时,会发生什么情况,它还会显示附加的 item_list。在填充 foodtruck_id 查询时,有什么方法可以隐藏 item_list 字段?

【问题讨论】:

    标签: mongoose mongoose-schema mongoose-populate


    【解决方案1】:

    1。 您可以在填充后使用 '-' 排除键。

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

      .populate({path:foodtruck_id,select:'foodtruck_name')

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

    【讨论】:

    • 嘿@Shumi,我们如何从对象数组中排除字段?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多