ホームページ >バックエンド開発 >Golang >Mongo-Go-Driver でネストされた OR/AND クエリ フィルターを作成するにはどうすればよいですか?

Mongo-Go-Driver でネストされた OR/AND クエリ フィルターを作成するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-18 02:16:02765ブラウズ

How to create nested OR/AND query filters in Mongo-Go-Driver?

Mongo-Go-Driver のネストされた OR/AND クエリ フィルター

Go ドライバーを使用して MongoDB で複雑なクエリ フィルターを作成する場合、一般的にOR や AND などのネストされた演算子が必要になります。ただし、公式ドライバーでは、フィルターを構築するために bson.D 要素と bson.E 要素を使用する必要があります。

ネストされた OR/AND 演算を処理するには、bson.D オブジェクトと bson.M オブジェクトを組み合わせることができます。

ネストされた OR 条件を含む AND フィルターを作成する次の例を考えてみましょう。

filter := bson.M{"$and": bson.D{
    {"p", 10},
    {"$or": bson.D{
        {"s", 30},
        {"a", 1}
    }}
}}

このアプローチは次の結果をもたらします。次のエラー: 「スライス リテラルでは primitive.M リテラル (タイプ primitive.M) をタイプ primitive.E として使用できません。」

この問題を解決するには、次のようにフィルターを定義できます。

filter := bson.D{
    {"p", 10},
    {"$or", bson.A{
        bson.D{{"s", 30}},
        bson.D{{"a", 10}},
    }},
}

ここでは、ネストされた OR 条件に bson.D 内で bson.D を使用する代わりに、bson.A (bson.D の配列) を使用します。要素)。これは、$or がフィルターの配列を期待しているためです。

もう 1 つのオプションは、メイン AND フィルターとネストされた OR 条件の両方に bson.M を使用することです。

filter = bson.M{
    "p": 10,
    "$or": bson.A{
        bson.M{"s": 30},
        bson.M{"a": 10},
    },
}

この場合、 bson.A では bson.M 要素も許可されるため、bson.D の代わりに bson.M を使用してネストされた OR 条件を定義できます。

以上がMongo-Go-Driver でネストされた OR/AND クエリ フィルターを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。