我的猫鼬查询是:
Spread.find(findCase).where('loc').near({
center: {
type: 'Point',
coordinates: [self.lon, self.lat]
},
maxDistance: distance
}).sort({ts : -1}).distinct("postId").exec();
所以我收到错误:
Error: sort cannot be used with distinct
但是如果我用控制台传递查询
db.spreads.distinct({}).sort({ts: -1});
没关系。
那么为什么mongoose不允许我在一个查询中选择distinct和sort,我该怎么办呢?
答案 0 :(得分:3)
来自docs,sort
不能与distinct
一起使用。
不能与distinct()
一起使用
但您可以执行聚合操作:
Spread.aggregate(
{$geoNear:{
"near":{"type":"Point","coordinates":[self.lon, self.lat]},
"distanceField":"dist.calculated",
"maxDistance":distance,
"query":findcase,
"spherical": true
}},
{$sort:{"ts":-1}},
{$group:{"_id":"$postId"}},function(err,resp){
console.log(resp);
// handle response.
}
)
注意:2dsphere
字段上的集合中需要存在loc
索引。要创建索引,请参阅:Does applying a 2dsphere index on a mongoose schema force the location field to be required?。
答案 1 :(得分:0)
测试数据:
db.createCollection("test");
db.test.insert({
loc : {type: 'Point', coordinates : [42,42]},
ts : new Date(2014,2,5),
postId : 1
});
db.test.insert({
loc : {type: 'Point', coordinates : [42,42]},
ts : new Date(2014,2,5),
postId : 1
});
db.test.insert({
loc : {type: 'Point', coordinates : [42,42]},
ts : new Date(2014,2,4),
postId : 2
});
db.test.insert({
loc : {type: 'Point', coordinates : [42,42]},
ts : new Date(2014,2,3),
postId : 3
});
使用查询
db.test.aggregate([
{
$geoNear: {
near : { type: 'Point', coordinates: [ 42, 42 ] },
distanceField : 'dist.calculated',
maxDistance: 200,
spherical: true
}
},
{
$sort : {ts: -1}
},
{$group:{"_id":"$postId"}}
]);
给出错误的结果
{ "_id" : 3 }
{ "_id" : 2 }
{ "_id" : 1 }
所以我想mongo首先应用分组然后不能按缺席字段排序。因此,mongoose可能禁止使用distinct进行排序。