使用Mongoose返回特定字段

我正在努力完成一件非常容易的事情,但还是失败了。

我尝试做的是,当我在服务器上收到get请求时,我希望返回所有文档,但只返回填充的特定字段。

我的架构如下

var clientSchema = new Schema({
    name:{
        type: String,
        required: true
    },
    phone:{
        type: String,
        required: true
    },
    email:{
        type: String,
        required: true
    },
    address: {
        type: String,
        required: false
    }
});

var orderDetailsSchema = new Schema({
    //isn't added to frontend
   confirmed:{
       type: Boolean,
       required: true,
       default: false
   },    
   service:{
       type: String,
       required: true
   },
   delivery:{
       type: String,
       required: false
   },
    payment:{
        type: String,
        required: false
    },
    status:{
        type: String,
        required: true,
        default: "new order"
    },
});

var orderSchema = new Schema({

   reference:{
       type: String,
       required: true
   },

    orderdetails: orderDetailsSchema,

    client: clientSchema,

    wheelspec: [wheelSchema],

    invoice:{
        type: Schema.Types.ObjectId,
        ref: 'Invoice'
    }


});

我想要的是只返回client.phoneclient.email加上orderdetails.status,但如果可能仍保留reference字段

我尝试使用lean()populate(),但没有成功。我是不是遗漏了什么非常简单的东西?或者我想要达到的目标并不是那么容易? 谢谢!


解决方案

您可以按如下方式指定要返回的字段:

Order.findOne({'_id' : id})
        .select('client.phone client.email orderdetails.status reference')
        .exec(function(err, order) {
        //
});

替代语法

Order.findOne({'_id' : id})
    .select('client.phone client.email orderdetails.status reference')
    .exec(function(err, order) {
      //
});

我在这里做了一些假设,但您应该能够看到想法。

相关文章