ホームページ >バックエンド開発 >Golang >Go ドライバーを使用して MongoDB クエリでネストされた論理演算子を構築する方法

Go ドライバーを使用して MongoDB クエリでネストされた論理演算子を構築する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-19 01:17:02810ブラウズ

How to Construct Nested Logical Operators in MongoDB Queries with Go Driver?

ネストされた論理演算子を使用した MongoDB のクエリ

複雑な MongoDB クエリを作成する場合、AND 内の OR や、逆に。ただし、Go 用の公式 MongoDB ドライバーでは、このようなクエリを構築する際に課題が生じます。

この問題は、bson.E 要素を必要とする bson.D を使用して階層化されたクエリ フィルターを作成しようとすると発生します。ネストされた OR/AND ロジックを実現するには、次の例に示すように、bson.D 内に bson.M をネストしようとします:

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

ただし、このアプローチでは、「プリミティブを使用できません」というエラーが発生します。 .M リテラル (プリミティブ.M 型) をスライス リテラルの primitive.E 型として使用します。"

正しいアプローチには、$or に配列 (bson.A) を使用し、明示的な $and 演算子 (これはデフォルトで暗黙的に指定されます)。ネストされたフィルターを作成するための 3 つの有効なオプションは次のとおりです。

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

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

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

これらのフィルターはネストされた論理式を正しく表し、MongoDB コレクションからデータを取得するために使用できます。

以上がGo ドライバーを使用して MongoDB クエリでネストされた論理演算子を構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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