MongoDB - запрос имени ключа объекта - PullRequest
1 голос
/ 28 февраля 2020

Я новичок в MongoDB. Я использую laravel -mongodb.

У меня есть документ в древовидной структуре. Мне нужно получить документы на определенный c год. Вот изображение моих данных:

enter image description here

Мне нужно выбрать все документы с периодом 2017 . Моя проблема в том, что точка является полем типа объекта. И значение индекса. Кто-нибудь знает, как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Вы можете попробовать запрос ниже:

db.collection.aggregate([

/** As we need to filter on key but not on key's value,
 *  So convert periodos object to an array which makes {k : 2017, v : value of 2017} etc.. */
{
    $addFields: {
        periodos: {
            $objectToArray: "$periodos"
        }
    }
},
/** Filter docs to check periodos has 2017 */
{
    $match: {
        "periodos.k": "2017"
    }
},
/** convert periodos array back to object to its original type */
{
    $addFields: {
        periodos: {
            $arrayToObject: "$periodos"
        }
     }
  }
])

Тест: MongoDB-Playground

0 голосов
/ 29 февраля 2020

Вам нужно использовать $ Существует Оператор

db.collection.find({ "periodos.2017" : { $exists : true } })
...