6

私たちのアプリケーションは 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 形式の構造化されたオブジェクトではなく、単一の文字列値として格納されるだけです。

前もって感謝します!ゼバ

4

2 に答える 2

4

フィールドの 2 番目の表現を保存する必要があります。mongo はセマンティック バージョンでソートできません。各コンポーネントを 4 文字にパディングすることにしました。

var document = {
  version: "1.2.3",
  padded_version: "0001.0002.0003",
}

次に、辞書式文字列インデックスで並べ替えることができます。

db.ensureIndex({ padded_version: -1 }) 

各コンポーネントをビットシフトすることもできます:

var document = {
  version: "1.2.3",
  integer_version: 1 << 16 + 2 << 8 + 3,
}

新しいバージョンは 256 に制限されますが、オーバーフローの問題が発生する可能性があります。ゼロで埋められた文字列バージョンを使用します。

于 2016-07-12T16:42:25.793 に答える