У меня есть коллекция в mongodb. Документы содержат массив. Я хочу знать, сколько элементов существует во всех массивах во всех документах. Есть несколько способов сделать это (в этом вопросе: MongoDB: count the number of items in an array), и я хочу знать, какой метод более эффективен, и как определить, какой метод более эффективен.Подсчитайте элементы в массивах в документах Mongodb: эффективность и производительность
Документы выглядеть следующим образом:
{"foo":[1,2,3,4]}
{"foo":[5,6,7]}
я могу получить номер я хочу, запустив либо:
db.countTest.aggregate([{$unwind:"$foo"},{$group:{_id:null,"total foo":{$sum:1}}}])
или
db.countTest.aggregate([{$project:{count:{$size:"$foo"}}},{$group:{_id:null,"total foo":{$sum:"$count"}}}])
SO мой вопрос: какой метод более эффективен, и как я могу сказать, что более эффективно. Я выполнил агрегированные запросы с помощью {explain: true}, однако я не нашел ничего особенно полезного в выходе. Мое чувство - это второй метод, более эффективный, так как он не требует развязки, но я надеялся, что смогу это доказать. Причина для запроса заключается в том, что этот пример представляет собой сокращенную версию сценария реальной жизни с гораздо более крупными документами.
Кроме того, каковы потенциальные последствия воздействия этих агрегатов на mongodb? Может ли агрегация повлиять на производительность базы данных в целом и время ответа других пользователей?
благодарит за вашу помощь.
Classic открытый вопрос. – Saleem
Один метод должен быть более эффективным, чем другой, и запуск агрегата повлияет на производительность базы данных, иначе он не будет. Так что я не уверен, как вопрос открыт? – robjwilkins
Это упрямый вопрос. Вы должны сами оценить производительность и посмотреть, что более эффективно, а что нет. – Saleem