Найти значение с ассоциативным массивом без знания ключа в MongoDB - PullRequest
0 голосов
/ 24 октября 2018

У меня есть документ с такой структурой:

{"user":{
     "nice":{
         "funny":"sure"
             }
     ,
     "notnice":{
         "funny":"maybe"
             }
     }
}

Я знаю ключи «пользователь», «забавный» и значение «уверен» и «возможно», но я не знаю, «хороший»и "notnice".

Как мне выполнить оптимизированный запрос для поиска во многих документах.

Например, если я хочу найти "верное" значение, зная средние клавиши, которые я делаю:

$document = $users->findOne([
'$or' => [
        ['user.nice.funny' => 'sure'],
        ['user.notnice.funny' => 'sure']
    ]
]

);

Но как мне сделать то же самое, не зная "приятно" и "не замечать".

1 Ответ

0 голосов
/ 25 октября 2018

Это должно указать вам правильное направление:

db.collection.aggregate({
    $addFields: {
        "userTransformed": {
            $objectToArray: "$user" // transform "user" field into key-value pair
        }
    }
}, {
    $match: {
        "userTransformed.v.funny": "sure" // just filter on the values
    }
})

Честно говоря, это не будет быстрым для большого количества документов, но другого пути нет.Индексы не будут использоваться этим запросом.Если вы хотите быстрее, вам нужно изменить структуру документа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...