2017-05-24 135 views
0

我试图完成一些非常简单但仍然失败的事情。用猫鼬返回特定领域

我想要做的是当我得到我的服务器上的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.emailorderdetails.status返回,但仍然保留,如果可能的

我一直在使用lean()populate()尝试,但没有运气reference场跟他们。有什么非常简单的我失踪了吗?或者我想实现的目标并不那么容易? 谢谢!

+1

你的打电话是什么样的?您可以使用mongodb投影 – Astro

+0

需要查看您当前的查询 – Alex

回答

1

您可以指定字段返回这样的:

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) { 
     // 
}); 

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

+1

就像我想的那样工作。谢谢! –

0

只需要这样做: -

订单是在猫鼬注册的型号名称。

Order.findById(id) // set id you have to get 
    . populate('client') 
    .select('client.phone client.email orderdetails.status reference') 
    .exec(function(err, order) { 
     // 
});