我有一個非常(至少對我來說)使用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
(再次使用插件機制)。
我想下面的查詢:
找到所有的「對象」的「配合」到我的行程。 「適合」 是指:
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例子嗎? – 2015-02-24 16:57:02