ネストされた論理演算子を使用した 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 サイトの他の関連記事を参照してください。