使用猫鼬返回特定字段

Jac*_*her 4 javascript mongoose mongodb node.js mongoose-schema

我试图完成一些非常简单的事情,但仍然失败了。

我想做的是当我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'
    }


});
Run Code Online (Sandbox Code Playgroud)

我想要的是只返回client.phoneclient.email加上orderdetails.statusreference如果可能的话仍然保留字段

我试过使用lean()populate()但没有运气。有什么我想念的完全简单的东西吗?或者我想要达到的目标并不那么容易?谢谢!

Ale*_*lex 8

您可以指定要返回的字段,如下所示:

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

替代语法

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

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