带有 semver 的 PouchDB allDocs 范围
PouchDB allDocs range with semver
有什么方法可以让 allDocs
查询尊重顺序和范围的语义版本(semver,例如 1.0.2
):
例如:
const res = await db.allDocs({
startkey: `/myThing/1.0.0`,
endkey: `/myThing/1.5.2`,
});
谢谢!
一句话:没有
更长的答案:如果您可以自由地使用您的版本字符串进行创意,您可以近似类似的东西。索引对排序进行基于字符串的比较,因此您需要将您的值转换为与 semver 相同的字母数字排序的东西。通过为每个版本组件使用固定大小,这对于 semver(给定一定的范围限制)来说相对容易。也就是说,如果每个版本组件总是使用两位或三位数字,那么排序就可以了。
即:
- 1.0.0 变为
001.000.000
- 1.5.2 变为
001.005.002
- 10.9.100 变为
010.009.100
当然,这仅适用于 0 到 999 范围内的值。如果您的版本组件为 1000 或更高版本,则需要移动到 4 位数的解决方案等。这也不行t 处理某些 semver 方案中使用的可选部分,例如 1.0.0-rc1
中的 -rc1
。但通常情况下,这些部分无论如何都会按字母数字排序,因此在大多数情况下,这不需要任何额外的考虑。
有什么方法可以让 allDocs
查询尊重顺序和范围的语义版本(semver,例如 1.0.2
):
例如:
const res = await db.allDocs({
startkey: `/myThing/1.0.0`,
endkey: `/myThing/1.5.2`,
});
谢谢!
一句话:没有
更长的答案:如果您可以自由地使用您的版本字符串进行创意,您可以近似类似的东西。索引对排序进行基于字符串的比较,因此您需要将您的值转换为与 semver 相同的字母数字排序的东西。通过为每个版本组件使用固定大小,这对于 semver(给定一定的范围限制)来说相对容易。也就是说,如果每个版本组件总是使用两位或三位数字,那么排序就可以了。
即:
- 1.0.0 变为
001.000.000
- 1.5.2 变为
001.005.002
- 10.9.100 变为
010.009.100
当然,这仅适用于 0 到 999 范围内的值。如果您的版本组件为 1000 或更高版本,则需要移动到 4 位数的解决方案等。这也不行t 处理某些 semver 方案中使用的可选部分,例如 1.0.0-rc1
中的 -rc1
。但通常情况下,这些部分无论如何都会按字母数字排序,因此在大多数情况下,这不需要任何额外的考虑。