MongoDB 排序顺序和唯一字段
Posted
技术标签:
【中文标题】MongoDB 排序顺序和唯一字段【英文标题】:MongoDB sorting order and unique fields 【发布时间】:2019-01-31 04:12:57 【问题描述】:我正在使用像这样的猫鼬模式:
numero:
type: Number,
required: true,
unique: true
,
capacidad:
type: Number,
required: true
当我检索集合的文档时(例如使用Model.find()
),我得到的文档按_id
排序。
我的问题是:
MongoDB 创建一个索引来处理unique: true
要求,但它不使用它作为默认排序机制?
如果我这样做Model.find().sort("numero")
,这是使用索引来处理唯一性还是必须为我的查询构建另一个?
如果我定义自己的索引 (schema.index( numero: 1 ),我是在重复工作吗?
总结一下,维护一个为查询排序的集合的最佳实践是什么?
【问题讨论】:
【参考方案1】:首先让我们注意一下,您正在更具体地谈论 Mongoose 如何作为 MongoDB 的中介来处理事情。我的意思是在猫鼬模式中定义如下:
numero:
type: Number,
required: true,
unique: true
实际上意味着(通过使用unique: true
)您正在在字段numero
上创建唯一索引,而index: true
部分是可选的as per the documentation。
因此您不需要实际创建另一个索引。
这也应该回答您关于使用索引的Model.find().sort("numero")
的问题。
就最佳实践而言,您应该查看查询数据的方式,非常重要的是,您拥有什么类型的数据,以确定您需要什么样的索引。例如,如果您有 lat/lng
数据,您可能应该使用 Geospatial Index
等。
你也不想因为brings other issues as well而在索引上发疯。
查看 MongoDB 所做工作的另一个非常重要的工具是 explain operator,它为您提供有关查询计划的信息。
您应该经常使用它来分析和优化您的查询并找出瓶颈所在。
您还可以通过
查看您的收藏统计信息db.getCollection('your-collection-name').stats()
这将为您提供有关集合的当前索引大小等方面的良好信息。
希望这会有所帮助。
【讨论】:
以上是关于MongoDB 排序顺序和唯一字段的主要内容,如果未能解决你的问题,请参考以下文章
mongodb插入数据是按照啥排序的,为啥插入前三条按顺序,第四条就不是了
使用mongoose在mongodb中按升序和降序对多个字段进行排序