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 中按多个字段排序

mongodb插入数据是按照啥排序的,为啥插入前三条按顺序,第四条就不是了

MongoDB/Mongoose:在填充字段中排序

使用mongoose在mongodb中按升序和降序对多个字段进行排序

是否可以针对特定字段在 mysql 或 mongodb 中按顺序保存数据?

云上MongoDB常见索引问题及最优索引规则大全