在or-query中查询时的Mongoose

时间:2016-08-05 09:09:15

标签: javascript node.js mongodb mongoose

我的架构看起来像这样:

var UserSchema = new Schema({
    name: {type : String, required: true},
    location_a: {type: [Number], default: [0,0], index: '2dsphere'},
    location_b: {type: [Number], default: [0,0], index: '2dsphere'}
});

我的搜索输入有一个位置和距离。现在我想让位置_a或location_b靠近搜索位置的用户。

我尝试过这样的查询:

query = query.and([
        { $or: [
            query.where('location_a').near({
                center: {type: 'Point', coordinates: [long, lat]},
                maxDistance: distance * 1000, spherical: true
            }),
            query.where('location_b').near({
                center: {type: 'Point', coordinates: [long, lat]},
                maxDistance: 100 * 1000, spherical: true
            })
        ]}
    ]);

但它使我的App崩溃:“RangeError:超出最大调用堆栈大小”

1 个答案:

答案 0 :(得分:0)

我在查询中使用了错误的格式。这就是你如何做到的。

query = query.and([
        { $or: [
            {
                "at_student_location": {
                    "$near": [12.5386, 41.884],
                    "$maxDistance": 1000
                }
            }
            ,
            {
                "at_home_location": {
                    "$near": [12.5386, 41.884],
                    "$maxDistance": 1000
                }
            }
        ]}
    ]);

问题是mongo每个查询只接受一个geoNear表达式,所以不可能这样做。