Как проверить наличие вложенного ключа в объекте в MongoDB? - PullRequest
0 голосов
/ 04 апреля 2020

Так что проблема в том, что я должен найти количество отелей в каждом штате, используя «агрегат» функцию и оператор «группа» в MongoDB. Отели должны иметь как минимум 4,5 звезды и иметь атрибут "Wi-Fi" со значением true. Я прикрепил ниже ссылку на изображение со структурой объектов (экран из Robo3T)

Object structure

«Атрибуты» является ключевым бизнес-коллекции и может иметь вложенные ключи, такие как «Wi-Fi», но это не обязательно. Я не знаю, как проверить наличие этого ключа вместе с истинным значением. Я написал некоторый код, но не проверяя его (см. Ниже).

db.business.aggregate([
{$match: {"categories": {$in: ["Hotels"]}, "stars":{$gte: 3.5}}},
{$group: {_id:"$state", count:{$sum:1}}}])

Мне нужна помощь с этим примером и много объяснений.

1 Ответ

1 голос
/ 05 апреля 2020

вам не нужно проверять существование какого-либо поля, если вам нужно убедиться, что это поле истинно, поэтому просто добавьте 'attributes.Wi-Fi': true к объекту сопоставления

, чтобы запрос был

'attributes.Wi-Fi': true

если вам нужно проверить, что некоторый атрибут, такой как Wi-Fi, не существует или равен false, тогда запрос должен выглядеть так:

1-

'attributes.Wi-Fi': { $ne: true } // wi-fi attribute is not equal to true, this means either wi-fi does not exist or exists but equals any value but not true

2- или с помощью оператора $ или

$or: [
    {
        'attributes.Wi-Fi': { $exists: false } // wifi attribute does not exist
    },
    {
        'attributes.Wi-Fi': false // or exists and equal to false
    }
]

просто добавьте любой из этих запросов, если необходимо, к объекту $ match

...