Монго БД запрос с группой по и где - PullRequest
0 голосов
/ 22 октября 2018

Мне нужно преобразовать этот sql-запрос в запрос mongo db:

select * from ( 
select x, count(*) as CNT_T from table 
group by 1 ) aa where aa.Total = aa.CNT_T;

Я могу сделать группу (как показано ниже), но я не знаю, как сопоставить aa.CNT_T с aa.Всего после выполнения группы.

db.test.aggregate( [
   { $group: { _id: { x: "$x" },
               count: { $sum: 1 } } }
])

Спасибо ..

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Ваш SQL-запрос кажется мне неполным, поскольку поле Total, похоже, отсутствует в списке столбцов, возвращаемых внутренним SELECT.Кроме того, GROUP не выполняется, поэтому я не уверен, что именно вы хотите сделать здесь.

Используя MongoDB v3.6 и выше, однако вы можете сделать что-то подобное, используя $ expr , который позволяет сравнивать несколько полей в одном документе:

db.test.aggregate([{
    $group: {
        _id: "$x",
        docs: { $push: "$$ROOT" }
        count: { $sum: 1 }
    }
}, {
    $unwind: "$docs" // flatten the result array
}, {
    $match: {
        $expr: { $eq: ["$total", "$count"] } // apply the filter that you're after
    }
}])
0 голосов
/ 22 октября 2018

Все, что вам не хватает, это элемент соответствия

db.test.aggregate( [
  { $group: { _id: { x: "$x" }, count: { $sum: 1 } } },
  { $match: { count: { $eq: 1 } } }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...