2015-02-23 21 views
1

我想在猫鼬做geoNear +文本搜索汇总查询:

landmarkSchema.aggregate(
    [ 
     { "$geoNear": { 
     "near": { 
      "type": "Point", 
      "coordinates": [parseFloat(userCoord1), parseFloat(userCoord0)] 
     }, 
     "distanceField": "distance", 
     "minDistance": 1, 
     "maxDistance": 5000, 
     "spherical": true, 
     "query": { "loc.type": "Point" } 
     } }, 
     { $match: { $text: { $search: sText } } }, 
     { $sort: { score: { $meta: "textScore" } } } 

    ], 
    function(err,data) { 
    if (data){ 
     res.send(data); 
    } 
    else { 
     console.log('no results'); 
     res.send({err:'no results'});    
    } 
}); 

但蒙戈没有返回任何结果。当我单独执行每个查询时,将返回正确的结果,即$geoNear$match : $text。我是否错误地链接查询?

+0

从MongoDB的IRC用户说:“只有一个索引可以用于汇聚” - 任何人有这种类型的查询的最佳实践? – alyx 2015-02-23 22:44:30

回答

2

只有初始$match阶段可以使用索引,因此您不能在第二个$match中使用文本索引。您也不能合并使用2dsphere索引并在同一$match中使用文本索引。一种选择是切换文本搜索的阶段$match阶段和$geoNear阶段。交换时,文本搜索将使用文本索引,如果您设置spherical : false$geoNear仍然可以工作。 $geoNear将计算平面而非球面距离,并且不会使用索引。

如果这样做不可行,我们可以尝试考虑其他选项,如果您描述用例。