我试图完成一些非常简单的事情,但仍然设法失败。
我想要做的是当我在服务器上收到width:100%
请求时,我想要返回所有文档,但只填充特定的字段。
我的架构如下
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.phone
加client.email
,但如果可能,仍会保留orderdetails.status
字段
我尝试使用reference
和lean()
,但没有运气。我错过了什么完全简单的事吗?或者我想要实现的并不那么容易?
谢谢!
答案 0 :(得分: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)
简单地这样做: -
订单是在mongoose中注册的型号名称。
Order.findById(id) // set id you have to get
. populate('client')
.select('client.phone client.email orderdetails.status reference')
.exec(function(err, order) {
//
});
答案 2 :(得分:0)
您可以使用投影。
await Order.findById(diaryId, {phone: 1, email: 1, status: 1})
如果 phone:1 设置为 1,则包括在内,如果 phone:0 设置为 1,则排除。