比较MongoDB中的版本

Lea*_*der 5 versioning mongodb nosql

只是想知道是否有人可以提出一种更聪明的方法来做到这一点...

假设我在MongoDB中有一些带有version属性的文档,例如 { ..., version: { major: 1, minor: 2, patch: 13 } },或者{ ..., version: "1.2.13" }更简单。

查找所有具有XYZ或更高版本的文档的最简单方法是什么?我现在的操作方式基本上是一个很大的$ and子句。

Dyl*_*ong 5

你的第一个设计实际上非常好。原因是因为您可以索引字段majorminor并且patch可以快速读取。

查询数据实际上比使用$and查询容易得多。您可以只对匹配字段使用基本查询:

例如

db.versions.find({major:1,minor:2,patch:20}) //give me documents of version 1.2.20
db.versions.find({major:1}) //give me all documents with major version 1
db.versions.find({major:1,minor:{$gte:2,$lte:5}}) //give me all documents of major version and minor versions between 2 and 5 inclusive.
Run Code Online (Sandbox Code Playgroud)

您可以创建一个索引,如

db.versions.ensureIndex({major:1,minor:1,patch:1})
Run Code Online (Sandbox Code Playgroud)

$and查询主要适用于您希望在同一字段上多次运行更复杂查询的情况。例如,如果您想获得主要版本 1 和 2,您可以使用$and.

db.versions.find({major:1,major:2})实际上只会返回主要版本为 2 的文档。但是,db.versions.find({a:$all:[1,2]})在这种情况下也可以使用。理想情况下,您应该尽可能避免使用$and,因为它实际上会为$and数组中的每个表达式生成多个查询并执行联合。这比我上面提供的查询示例要贵得多。