У меня есть очень (по крайней мере для меня) сложный запрос с использованием Mongoose.Сложный запрос с mongoose, включая поддокументы, близкое состояние,
Прежде всего моей схеме:
var ObjectSchema = new Schema({
pickupStartDate: {type: Date, required: true, default: Date},
pickupEndDate: {type: Date, required: true, default: Date},
...
handoverStartDate: {type: Date, required: true, default: Date},
handoverEndDate: {type: Date, required: true, default: Date},
...
});
С помощью «плагин механизм» мой объект имеет два адреса (так называемые pickupAddress
и handoverAddress
адрес выглядит так:.
var name = 'address';
var obj = {};
obj[name] = {
street: String,
zipCode: String,
city: String,
state: String,
country: String,
loc: {type: [Number], index: '2dsphere'}
};
schema.add(obj);
И другая схема:
var TripSchema = new Schema({
startDate: {type: Date, required: true, default: Date},
endDate: {type: Date, required: true, default: Date},
handoverRadius: {type: Number, required: true}
});
У этого есть address
, тоже (с помощью плагина).
Я хочу следующий запрос:
Найти все «объекты», которые «вписываются» в моей поездке. "Fit" означает:
handoverStartDate >= trip.startDate
handoverEndDate <= trip.endDate
- `handoverAddress рядом trip.address
- ...
Я думал, что это будет хороший подход:
ObjectSchema
.find()
.and([
{ handoverStartDate: {$gte: trip.startDate}},
{ handoverEndDate: {$lte: trip.endDate}},
{ 'handoverAddress.loc': {$near: {
'$maxDistance': 10 * 1000,
'$center': {
type: 'Point',
coordinates: trip.address.loc
}
}}}
])
.exec(function(err, cdObjects) {
console.log(err);
console.log(cdObjects);
});
Но это приводит к следующей ошибке:
{ message: 'Cast to number failed for value "[object Object]" at path "handoverAddress.loc"'
.
Я думаю, из-за 'handoverAddress.loc'
. Но я не уверен, как указать это, поскольку это должна быть строка (потому что это поддокумент).
вы можете опубликовать пример JSON в виде док на БД? –