3

データベース (MongoDB) のレコードに最大 10 個のタグを追加できるようにしたいのですが、それぞれに関連するインデックスを含む 10 個の列を追加したくありません。そこで、これらのタグの一意の合計を追加すると考えました。

例(6つのタグ付き)

|------------|
|value | tag |
|------------|
|1     |a    |
|2     |b    |
|4     |c    |
|8     |d    |
|16    |e    |
|32    |f    |
|------------|

例えば

a + b = 3

b + c + d = 14

次に、値の合計だけを Mongo に保存します。

これらの組み合わせは常に一意であり、反復を使用して永続ストレージからプルするときにタグに「再構成」できます。

int tagSum
for each (tag in tagCollection.OrderDescending)
{
    if (tagSum >= (int)tag)
    {
        TagProperty.Add(targetAge);
        tagSum -= (int)tag;
    }
}

しかし、私の問題は、特定のタグを照会するために使用できる数式が必要だと思ったことです。たとえば、値 4 を渡して「c タグ」を見つけます。間違っているか、見つけられません。

Mongo の Multikeys ソリューションを使用することに満足していますが、インデックスを作成するデータが他にもたくさんあるため、10 ではなく 1 つのインデックスを使用した方がよいでしょう‽</p>

4

2 に答える 2

1

マルチキーは、テーブルスキャンなしで配列の単一のインデックスから任意のドキュメントを見つけることができるため、この問題に対する正しいアプローチです。あなたの場合、タグを表す文字の適切な選択を配列に入れることができます: ["a", "d", "e"].

曲名、アルバム名、アーティスト名など、各フィールドに同じタグ値が含まれる可能性があるより複雑なケースでは、タグ フレーズを 2 回追加することがあります。例えば"artist:Hello"。これで、任意のフィールドで発生するタグ ワードまたは特定のフィールドで発生するタグ ワードを検索できます。どちらの方法でも、インデックスを使用して一致するレコードを検索します。

于 2012-04-29T05:40:02.103 に答える
0

タグ af を整数 0 ~ 5 に変換し、それを と呼びtagValueます。次に、必要な数値は です1<<tagValue

于 2012-04-29T05:13:25.360 に答える