Я хочу найти ближайших рабочих по его местонахождению, обладающих определенным навыком..where() по населенным полям
Расположения Схема:
var schema = Schema({
name: String,
type: String, // home | latest
user: {type: Schema.Types.ObjectId, ref: 'User'},
address: String,
position: {
type: {type: String, default: 'Point'},
coordinates: [Number]
},
status: String // active | inactive
}, {collection: 'locations'});
работника схема:
var schema = Schema({
username: String,
password: String,
firstName: {type: String, default: ''},
middleName: {type: String, default: ''},
lastName: {type: String, default: ''},
role: {type: String, default: 'user'}, // admin | user | worker
skills: [{
object: {type: Schema.Types.ObjectId, ref: 'Skill'},
slug: String, // Should remove in the future
ratePerHour: Number,
status: {type: String, default: 'active'} // active | inactive
}],
locations: [{type: Schema.Types.ObjectId, ref: 'Location'}]
}, {collection: 'users'});
навык схема:
var schema = Schema({
name: String,
slug: String,
users: [{type: Schema.Types.ObjectId, ref: 'User'}],
isFeatured: Boolean,
minRatePerHour: Number,
maxRatePerHour: Number,
status: String // active | inactive | deleted
}, {collection: 'skills'});
пыльник мой запрос, но .where()
не работает с заполненным полем.
Location
.find({
'position': {
$near: {
$geometry: {type: 'Point', coordinates: [lat, lng]},
$minDistance: 0,
$maxDistance: 20000
}
}
})
.populate('user')
.deepPopulate('user.skills.object')
.where({'user.skills': {$elemMatch: {'object.slug': 'cleaning'}}})
.limit(5)
.exec(callback);
Я делаю неправильно эти схемы? Должен ли я использовать встроенный документ, а не ссылку на идентификатор? Есть ли еще какой-нибудь запрос?
'object.slug' существует только после' .deepPopulate() '... за пределами поля' object' содержит значение 'Skill._id' – Manhhailua
Это всего лишь пример, который вы должны просмотреть и исправить для своих нужд. –
Я попробовал параметр 'match' в' .populate() 'несколько раз, но он влияет только на объект, который будет заполнен. Поле 'user' будет' null', если пользователь не будет соответствовать во время совокупности. – Manhhailua