使用$ near $或其他字段的Mongoose查询

时间:2017-04-30 13:04:56

标签: javascript node.js mongodb mongoose

我试图通过查询$或在不同字段上返回文档,包括带有问题的$ near查询。

模式

locationSchema{
    ...
    beacon: String,
    access_point: String,
    gps: [],
    ...
}

locationSchema.index({ gps: '2dsphere' });

查询

locations.find({
    '$or': [
        {
            gps: {
                '$near': {
                    '$geometry': {
                        type: 'Point',
                        coordinates: [
                            13.1313131,
                            -4.444444
                        ]
                    },
                    '$maxDistance': 50,
                    distanceField: 'distance',
                    spherical: true
                }
            }
        },
        {
            access_point: '88:A6:BB:26:95:11'
        },
        {
            access_point: '88:A6:C6:26:CC:21'
        }
    ]
},
function(err,locations){
    //DosomethingwithfoundLocations
});

如果我只使用$near输入执行查询,则会按预期返回一个位置,如果仅使用access_point列表执行查询,则会返回一个位置,但是当两个查询同时运行时都不会。

我假设这是一个错误,但无论如何我可以使用这种类型的查询吗?

由于

1 个答案:

答案 0 :(得分:2)

根据文档不支持此功能。您可以阅读更多相关信息HERE

  

$或支持具有以下异常的地理空间子句,用于near子句(near子句包括$ nearSphere和$ near)。 $或不能包含带有任何其他子句的near子句。

但是,您可以使用geoWithin并传递center运算符以实现相同的目标。请记住,geoWithin不会对生成的数组进行排序。