Consultas lógicas aninhadas com MongoDB Go Driver
As consultas do MongoDB geralmente exigem o uso de operadores lógicos aninhados (AND/OR) para filtrar documentos com base em múltiplos critérios. No driver Go MongoDB, consultas lógicas aninhadas podem ser construídas usando os tipos bson.D e bson.M.
Construindo consultas OR/AND aninhadas
Para criar um consulta OR/AND aninhada, você precisa usar o tipo bson.D para representar o operador lógico externo (por exemplo, $and) e passar elementos bson.E para ele. Cada elemento bson.E representa um par campo-valor, onde o nome do campo pode ser o operador lógico (por exemplo, $or) e o valor pode ser um bson.D ou um bson.A (para matrizes).
Exemplo de consulta OR/AND aninhada
Considere a consulta MongoDB:
{ "$and": { "p": 10, "$or": { "s": 30, "a": 1 } } }
Para representar esta consulta em Go usando o driver MongoDB, você pode usar o seguinte código:
filter := bson.D{ {"p", 10}, {"$or", bson.A{ bson.D{{"s", 30}}, bson.D{{"a", 1}}, }}, }
Neste exemplo, o bson.D representa o operador $and externo e o bson.A representa o operador $or aninhado. Cada bson.D dentro de $or representa uma subconsulta.
Usando bson.M para consultas aninhadas
Você também pode usar o tipo bson.M para representar consultas aninhadas. bson.M é uma interface de mapa[string]{} que pode conter nomes de campos e seus valores correspondentes. O valor pode ser outra instância de bson.M, representando uma consulta aninhada.
Por exemplo, a consulta acima pode ser representada usando bson.M da seguinte forma:
filter := bson.M{ "p": 10, "$or": bson.A{ bson.M{"s": 30}, bson.M{"a": 1}, }, }
Recomendações
Seguindo essas diretrizes, você pode criar consultas OR/AND aninhadas com eficiência em Go usando o driver MongoDB.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3