MongooseJS - 与过滤器和排序不同

时间:2018-02-09 07:14:58

标签: node.js mongodb mongoose mongodb-query

我有一个地址列表,我想获得一个州的城市列表。所以一个独特的城市列表。由州。

Locations.find( {'address.state':state}, {_id:1,'address':1,'name':1}, callback );

根据具体国家给我一份完整的清单。

Locations.distinct( 'address.city',{'address.state':state},{$sort:{'address.city':1}}, callback );

这也不起作用。

Locations.distinct( 'address.city',{'address.state':state} ).sort().exec(callback);

这似乎给了我一个城市列表,但它没有按字母顺序排序......所以我很难检查我的数据。

在AL上搜索,

"Atmore",
"Daleville",
"Abbeville",
"Bessemer",
"Alberta",
"Huntsville",
"Addison",
"Albertville",
"Helena",
"Alexandria",
...

帮助 - 干杯。

2 个答案:

答案 0 :(得分:2)

因此,mongdb distinct函数返回一个不同值的数组,因此你不能在你的情况下链接任何其他操作,如sort。

与find一样,它返回游标,你可以应用sort来对返回的数据进行排序。

对于排序的非独特结果,您可以使用

Locations.find( {'address.state':state}, {_id:1,'address':1,'name':1}).sort({'address.city':1}).exec(callback);

对于distinct和sort,你都要使用聚合。

Locations.aggregate( [{$match:{'address.state':state}},{$group:{_id:'$address.city'}},{$sort:{_id:1}}).exec(callback);

答案 1 :(得分:0)

根据sort的mongoose v5.0.4文档,我引用:

enter image description here

可以通知实际上它是一个猫鼬限制。在mongodb 3.6 distinctsort的文档中没有对它的引用。