首页 > 解决方案 > Mongoose 在填充的数组中填充并选择一个字段

问题描述

我有这个数据集:

  {
    name: "Lakawon Island Resort",
    price_per_night: 2804.0,
    address: "Cadiz Viejo",
    amenities: 
      {
        tv: false,
        reservation: false,
    },
    reviews: [
        { 
            _id: 03020,
            user: 1030340,
            comment: 'Hi there'
        }
    ]
    image:
      "https://images.unsplash.com/photo-1591017403286-fd8493524e1e"
  },

这是我的架构:

const reviewSchema = mongoose.Schema({
    rating: {
        type: Number,
        required: true
    },
    comment: {
        type: String,
        required: true
    },
    user: {
        type: mongoose.Schema.Types.ObjectId,
        required: true,
        ref: 'User'
    },
}, {
    timestamps: true
})

const resortSchema = mongoose.Schema({
    user: {
        type: mongoose.Schema.Types.ObjectId,
        required: true,
        ref: 'User'
    },
    name: {
        type: String,
        required: true
    },
    price_per_night: {
        type: Number,
        required: true,
    },
    address: {
        type: String,
        required: true
    },
    reviews: [reviewSchema], 
    image: {
        type: String
    },
    amenities: {
        tv: { type: Boolean, required: true, default: false },
        reservation: { type: Boolean, required: true, default: false },
        moderate_noise: { type: Boolean, required: true, default: false },
    },
}, { timestamps: true
})

const Resort = mongoose.model('Resort', resortSchema)

我正在尝试在评论数组中提取用户对象数组列表,该数组也在度假村列表中。到目前为止,我得到了这个不起作用:

const reviews = await Resort.findById(req.params.id).populate({ path: 'resort.reviews', populate: { path: 'reviews.user' } })

我想就如何实现这一目标寻求帮助。任何想法,所以我会在我的 api 上显示这样的东西?

{
    name: "Lakawon Island Resort",
    price_per_night: 2804.0,
    address: "Cadiz Viejo",
    amenities: 
      {
        tv: false,
        reservation: false,
    },
    reviews: [
        { 
            _id: 03020,
            user: {
                _id: 03030,
                name: 'Rick Martin'
              },
        },
       { 
            _id: 03021,
            user: {
                _id: 04031,
                name: 'Rick Martin'
              },
        }
            ]
            comment: 'Hi there'
        }
    ]
    image:
      "https://images.unsplash.com/photo-1591017403286-fd8493524e1e"
  },

标签: mongodbexpressmongoose

解决方案


await Resort.findById(req.params.id).populate({ path: 'reviews.user', select: 'name' })

推荐阅读