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 サイトの他の関連記事を参照してください。