使用mongoose返回特定字段

时间:2017-05-24 14:53:36

标签: javascript node.js mongodb mongoose mongoose-schema

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

我想要做的是当我在服务器上收到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.phoneclient.email,但如果可能,仍会保留orderdetails.status字段

我尝试使用referencelean(),但没有运气。我错过了什么完全简单的事吗?或者我想要实现的并不那么容易? 谢谢!

3 个答案:

答案 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,则排除。