MongoDB如何基于数组首个元素实现游标排序?
解决方案
要实现仅根据images数组首个元素排序,且只包含至少一个图片URL的文档,直接使用游标排序完全可行,具体步骤如下:
过滤目标文档
先筛选出images数组非空的文档,两种常用写法:- 检查数组第一个元素是否存在:
{ "images.0": { $exists: true } } - 检查数组不为空数组:
{ images: { $ne: [] } }
- 检查数组第一个元素是否存在:
按首个元素排序
排序时明确指定数组的第一个元素,语法为{ "images.0": 1 }(升序)或{ "images.0": -1 }(降序)
完整示例(Mongo Shell)
// 升序排序 db.yourCollectionName.find({ "images.0": { $exists: true } }).sort({ "images.0": 1 }) // 降序排序 db.yourCollectionName.find({ images: { $ne: [] } }).sort({ "images.0": -1 })
你之前尝试失败的原因
- 直接用
images: 1/-1是按整个数组的字典序排序,而非仅第一个元素; - 如果仅写
sort({ "images.0": 1 })但未过滤空数组,会把images为空的文档也包含进来,这类文档的images.0不存在,排序时会被放在队列最前或最后(取决于MongoDB版本),导致你误以为排序逻辑不生效。
内容的提问来源于stack exchange,提问作者Nicolae Maties
相关产品推荐
相关产品推荐

