Подсчет (необязательно) отзывов с использованием монго - PullRequest
0 голосов
/ 05 декабря 2018

Я новичок в Монго, поэтому, пожалуйста, прости меня за любую наивность.Ниже описано, как форматируется моя коллекция баз данных:

{
”id” : s t r i n g
”Reviews ” : [ {
 ”R a tin g s ” : {
 ”S e r v i c e ” ( o p ti o n al ) : numeric ,
 ”Cleanliness” (optional ) : numeric ,
 ”Overall” : numeric ,
 ”Value” (optional) : numeric ,
 ”SleepQuality” (optional ) : numeric ,
 ”Rooms” ( o p ti o n al ) : numeric ,
 ”Location” (optional) : numeric
     } ,
  ”AuthorLocation” : string ,
  ”T i t l e ” : s t ri n g ,
  ”Author” : s t ri n g ,
  ”ReviewID” : s t ri n g ,
  ”Content ” : s t ri n g ,
  ”Date” : ISODate ( )
}],
”H o t el I n f o ” : {
  ”Name” : s t ri n g ,
   "HotelURL” : s t ri n g ,
  "P ri c e ” : s t ri n g ,
  ”Address ” : s t ri n g ,
  ”HotelID ” : s t ri n g ,
 ”ImgURL” : s t r i n g
   }
 }

Моя цель - подсчитать количество оценок каждого ресторана.Я попробовал следующее:

db.reviews.aggregate(
  {$group : {_id: "$HotelInfo.Name", total: {$sum : "$Reviews.Ratings"}
  }}
 )

Однако, это всего 0 для печати.Любые идеи относительно того, почему это не работает, и подсказка, как заставить это работать.

1 Ответ

0 голосов
/ 05 декабря 2018

Вы можете попробовать разматывать массив Reviews и использовать оператор $add:

db.sample.aggregate([
  {$unwind: "$Reviews"},
  {$group: {_id: "$HotelInfo.Name", total: {$sum: {$add: [{$ifNull: ["$Reviews.Ratings.Service", 0]}, {$ifNull: ["$Reviews.Ratings.Cleanliness", 0]}, "$Reviews.Ratings.Overall", {$ifNull: ["$Reviews.Ratings.Value", 0]}, {$ifNull: ["$Reviews.Ratings.SleepQuality", 0]}, {$ifNull: ["$Reviews.Ratings.Rooms", 0]}, {$ifNull: ["$Reviews.Ratings.Location", 0]}]}}}}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...