Ограничение возвращаемых поддокументов mongodb - PullRequest
0 голосов
/ 09 мая 2018

Допустим, у меня есть набор данных следующим образом

{
"username": "myUsername",
"2018": { //year
        "totalData": 1000
        01: { //month
            "totalData": 30
            01: { //day
                "totalData": 1
                01: { //hour
                    "totalData": 0
                }
                02: {
                    "totalData": 0
                }
                02: {
                    "totalData": 1
                }                   
                //etc

            }
            02: {
                "totalData": 12
                01: { //hour
                    "totalData": 3
                }
                02: {
                    "totalData": 6
                }
                02: {
                    "totalData": 3
                }                   
                //etc                   
            }
            03: {
                "totalData": 6
                01: { //hour
                    "totalData": 4
                }
                02: {
                    "totalData": 1
                }
                02: {
                    "totalData": 1
                }                   
                //etc                   
            }
                //...etc
            31: {
                "totalData": 1
                01: { //hour
                    "totalData": 0
                }
                02: {
                    "totalData": 0
                }
                02: {
                    "totalData": 1
                }                   
                //etc                   
            }
        }
        02: {
            "totalData": 51
            01: {
                "totalData": 17
                01: { //hour
                    "totalData": 5
                }
                02: {
                    "totalData": 5
                }
                02: {
                    "totalData": 7
                }                   
                //etc                   
            }
            02: {
                "totalData": 1
                01: { //hour
                    "totalData": 0
                }
                02: {
                    "totalData": 0
                }
                02: {
                    "totalData": 1
                }                   
                //etc                   
            }
            03: {
                "totalData": 7
                01: { //hour
                    "totalData": 6
                }
                02: {
                    "totalData": 0
                }
                02: {
                    "totalData": 1
                }                   
                //etc                   
            }
                //...etc
            30: {
                "totalData": 5
            }
        }       

    }
}

Таким образом, я отслеживаю использование данных по годам, месяцам, а затем по дням, каждый из которых имеет общее использование за этот год / месяц / день.

Пока это нормально, однако в какой-то момент я буду уделять часы и минуты, и я не хотел бы возвращать весь документ, когда он не нужен.

Итак, я хотел бы сделать запрос, который каким-то образом ограничивает «глубину» запроса.

Так что я бы хотел вернуть один начальный запрос, например, в 2018 году, сколько данных использовалось каждый месяц. затем, во внешнем интерфейсе, о том, как пользователь углубляется в детали, насколько это им необходимо, но поскольку это может стать довольно большим, кажется огромной тратой тянуть этот полный документ каждый раз.

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

{
2018: {
        "totalData": 1000
        01: {
            "totalData": 30
        }
        02: {
            "totalData": 51
        }
}           

}

1 Ответ

0 голосов
/ 10 мая 2018

Вы можете использовать проекция для встроенных документов, как примеры, приведенные в официальной документации Mongo:

Для вашего случая вы можете попробовать:

db.collection.find({},{"2018.totalData":1, "2018.01.totalData": 1, "2018.02.totalData":1 })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...