У меня есть три схемы документа в моей модели базы данных: pointSchema (просто определение точки GeoJSON), PlaceSchema (это реальное место, как ночной клуб) и EventSchema (в нем будут храниться данные, связанные с такими событиями, как вечеринки и фестивали).
Но у меня есть некоторые проблемы.Мне нужно запросить документы событий в соответствии с его местоположением, но эти данные о местоположении хранятся в поддокументе, который связан с событием.
Ниже приведены определения моей схемы:
const pointSchema = new mongoose.Schema({
type: {
type: String,
enum: ['Point'],
required: true
},
coordinates: {
type: [Number],
required: true
}
});
const PlaceSchema = new mongoose.Schema(
{
name: {
type: String,
required: true
},
location: {
type: pointSchema,
required: true
}
},
{
versionKey: false,
timestamps: true
}
);
PlaceSchema.index({
name: 'text',
location: "2dsphere"
});
const EventSchema = new mongoose.Schema(
{
name: {
type: String,
required: true
},
place: {
type: mongoose.SchemaTypes.ObjectId,
ref: 'Place'
}
},
{
versionKey: false,
timestamps: true
}
)
EventSchema.index({
name: 'text'
})
Я могу фильтровать документы Places, используя что-то вроде этого:
db.Places.find({
location: {
$geoWithin: {
$centerSphere: [
[ -28.824342, -49.218433 ],
100 / 6378.1
]
}
}
})
Но я не могу сделать то же самое, когда пытаюсь отфильтровать события.Я уже пробовал запрос, подобный этому:
db.Events.find({
"place.location": {
$geoWithin: {
$centerSphere: [
[ -28.824342, -49.218433 ],
100 / 6378.1
]
}
}
})
, но это решение не работает.Кто-нибудь может мне помочь?
Спасибо.