Как посчитать общее количество запросов SELECT для конкретной коллекции c из журналов MongoDB? - PullRequest
1 голос
/ 10 февраля 2020

У меня есть коллекция "cars" в MongoDB, и ниже показано, сколько документов в ней существует:

let carsColl = db.getCollection('cars');
carsColl.count();

Однако мне нужно знать, сколько раз коллекция cars в общей сложности Также, скажем, если у меня две машины x и y, могу ли я узнать, сколько запросов SELECT выполнено для документов 'x' против 'y'?

Я проверил триггеры MongoDB, но они могут быть созданы только для INSERT , ОБНОВЛЕНИЕ , ЗАМЕНИТЬ и УДАЛИТЬ , но не ВЫБРАТЬ .

Любое руководство окажет большую помощь.

1 Ответ

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

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

Где, как показано в приведенном ниже коде, нет документов в автомобилях коллекции:

let carsColl = db.getCollection('cars');
carsColl.count();

Поскольку это не то, что вы ищете, то попробуйте ниже:

Шаги:

  1. Включить профилирование базы данных, по умолчанию ваша БД будет регистрировать медленно выполняющиеся запросы, которые являются любыми запросами, которые выполняются> 100 мс , Так что вам нужно регистрировать все запросы в этом случае. Выполните приведенный ниже запрос, чтобы зарегистрировать все запросы в БД:

    db.setProfilingLevel(2)
    

    Примечание: Это может повлиять на производительность вашей БД, поскольку она будет регистрировать все операции, которые могут стать проблемой для серверов Prod с большим количеством вызовов БД. Ref: manage-the-database-profiler . Также проверьте, как выполнить вышеуказанный запрос, так как может потребоваться доступ администратора.

  2. Теперь, выполнив вышеуказанный шаг, вы можете выполнить следующие запросы:

    1. Чтобы получить количество всех запросов на чтение на автомобилях коллекции внутри test DB, попробуйте запрос ниже. Здесь op: 'query' относится ко всем вызовам поиска (помните, что агрегация отличается от op : command).

      db.system.profile.find( { ns : 'test.cars', op: 'query' }).count()
      
    2. Чтобы получить количество заданных c запросов: в этом случае скажем, в вашей коллекции есть несколько документов с полем carType : x, а в нескольких других * carType : y, и вы запрашиваете их следующим образом db.cars.find('carType': 'x'), затем:

      db.system.profile.find( { ns : 'test.cars', op: 'query' , 'command.filter.carType' : 'x' }).count() // will give you all queries on x
      
      db.system.profile.find( { ns : 'test.cars', op: 'query' , 'command.filter.carType' : 'y' }).count() // will give you all queries on y
      

Примечание: По сути, вы будете задавать свой фильтр-запрос над db.system.profile.find(), чтобы различать нужные вам находки (Vs) со всеми остальными журналами поиска.

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