我们的应用程序基于 MongoDB。我们将 IT 资产的“名称”、“版本”和各种属性存储在 MongoDB 中。我们有一个新的搜索需求,我们需要根据关键字检索最新版本的资产。这里的问题是我的版本号的格式为 xyz(即major.minor.maintenance)
基本上,我应该首先按主要版本 (desc)、次要版本 (desc) 和维护版本 (desc) 对结果集进行排序。例如对于下面给出的版本号: 1.0.10 1.1.0 11.0.0 2.0.1 排序后的版本应该是: 1.0.10 1.2.10 2.0.1 11.0.0 我是否可以在 Mongo 层正确排序本身?不幸的是,版本号仅存储为单个字符串值,而不是 xyz 格式的结构化对象。
提前致谢!泽巴
您需要存储该字段的第二个表示形式,mongo 无法对语义版本进行排序。我选择将每个组件填充为 4 个字符。
var document = {
version: "1.2.3",
padded_version: "0001.0002.0003",
}
Run Code Online (Sandbox Code Playgroud)
然后您可以根据字典字符串索引进行排序。
db.ensureIndex({ padded_version: -1 })
Run Code Online (Sandbox Code Playgroud)
您还可以对每个组件进行位移位:
var document = {
version: "1.2.3",
integer_version: 1 << 16 + 2 << 8 + 3,
}
Run Code Online (Sandbox Code Playgroud)
它限制您使用 256 个新版本,但是存在潜在的溢出问题等。我会坚持使用零填充字符串版本。
| 归档时间: |
|
| 查看次数: |
1359 次 |
| 最近记录: |