在 Mongoose 中通过其嵌套文档的一个属性查找文档

问题描述 投票:0回答:0

我有这四个模式。 Restroom schema 有一个名为 Full address 的属性,由 Address、City 和 Region schema 的 id 组成。我不知道是否有一种方法可以通过城市模式的邮政编码属性搜索所有可用的洗手间,因此如果该邮政编码与请求参数中传递的邮政编码匹配,我将获得所有相应洗手间的列表。

const AddressSchema = new Schema<IAddress>(
  {
    street: {
      type: String,
      required: true,
    },
  },
  {
    timestamps: true,
    versionKey: false,
  }
);
const CitySchema = new Schema<ICity>(
  {
    name: {
      type: String,
      required: true,
    },
    zipCode: {
      type: String,
      required: true,
    },
  },
  {
    timestamps: true,
    versionKey: false,
  }
);
const RegionSchema = new Schema<IRegion>(
  {
    name: {
      type: String,
      required: true,
    },
    code: {
      type: String,
      required: true,
    },
  },
  {
    timestamps: true,
    versionKey: false,
  }
);
const RestroomSchema = new Schema<IRestroom>(
    {
        name: {
            type: String, 
            required: true
        },
        avgRating: {
            type: Number,
            required: true
        }, 
        fullAddress: {
            address: {
                type: Schema.Types.ObjectId, ref: 'addresses', 
                required: true
            },
            city: {
                type: Schema.Types.ObjectId, ref: 'cities',
                required: true
            },
            region: {
                type: Schema.Types.ObjectId, ref: 'regions',
                required: true
            }
        }
    }, 
    {
        timestamps: true,
        versionKey: false
    }
);

我在想这样做是我在某处找到的,但我不知道它是否是正确的。

RestroomModel.findOne({ _id: id })
             .populate({ path: 'fullAddress.address', populate: 'street' })
             .populate({ path: 'fullAddress.city', populate: 'zipCode' })
             .populate({ path: 'fullAddress.region', populate: 'name'});
mongodb express mongoose nosql
© www.soinside.com 2019 - 2024. All rights reserved.