Вложенные логические запросы с драйвером MongoDB Go
Запросы MongoDB часто требуют использования вложенных логических операторов (И/ИЛИ) для фильтрации документов на основе по множеству критериев. В драйвере Go MongoDB вложенные логические запросы можно создавать с использованием типов bson.D и bson.M.
Построение вложенных запросов OR/AND
Чтобы создать вложенный запрос OR/AND, вам необходимо использовать тип bson.D для представления внешнего логического оператора (например, $and) и передавать в него элементы bson.E. Каждый элемент bson.E представляет пару поле-значение, где имя поля может быть логическим оператором (например, $or), а значение может быть bson.D или bson.A (для массивов).
Пример вложенного запроса ИЛИ/И
Рассмотрим запрос MongoDB:
{ "$and": { "p": 10, "$or": { "s": 30, "a": 1 } } }
Чтобы представить этот запрос в Go с помощью драйвера MongoDB, вы можете использовать следующий код:
filter := bson.D{ {"p", 10}, {"$or", bson.A{ bson.D{{"s", 30}}, bson.D{{"a", 1}}, }}, }
В этом примере bson.D представляет внешний оператор $and, а bson.A представляет собой вложенный оператор $or. Каждый bson.D в $or представляет подзапрос.
Использование bson.M для вложенных запросов
Вы также можете использовать тип bson.M для представления вложенные запросы. bson.M — это интерфейс карты[строка]{}, который может содержать имена полей и соответствующие им значения. Значением может быть другой экземпляр bson.M, представляющий вложенный запрос.
Например, приведенный выше запрос можно представить с помощью bson.M следующим образом:
filter := bson.M{ "p": 10, "$or": bson.A{ bson.M{"s": 30}, bson.M{"a": 1}, }, }
Рекомендации
Следуя этим рекомендациям, вы сможете эффективно создавать вложенные запросы ИЛИ/И в Go с помощью драйвера MongoDB.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3