Что такое mongodb-эквивалент сортировки по полю GROUPed BY

У меня есть две коллекции в MongoDB. Давайте назовем один "объект":

{
    _id: 11,
    name: "Foo"
},
{
    _id: 12,
    name: "Bar"
},
{
    _id: 13,
    name: "Quux"
}

Другой - "значения", которые ссылаются на "объекты":

{
    _id: 21,
    value: "One",
    object_id: 11
},
{
    _id: 22,
    value: "Two",
    object_id: 11
},
{
    _id: 21,
    value: "Three",
    object_id: 13
}

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

{
    _id: 11,
    name: "Foo",
    links: 2
},
{
    _id: 13,
    name: "Quux"
    links: 1
},
{
    _id: 12,
    name: "Bar",
    links: 0
}

В SQL это достижимо с помощью простого внешнего соединения, GROUP BY и ORDER BY.

Я не могу использовать MapReduce (это должен быть онлайн-запрос, а не запланированное задание). Я не могу ничего денормализовать, так как "объекты" и "ценности" на самом деле являются коллекциями довольно больших документов с большим количеством устаревшего кода в зависимости от их точной структуры.

Любой совет?

1 ответ

MongoDB не имеет JOINs. Невозможно получить данные из более чем одной коллекции с помощью одного запроса. Это означает, что вам нужно запрограммировать JOIN на прикладном уровне, а затем выполнить GROUP BY, также в приложении. Как это сделать, зависит от технологии, которую использует ваше приложение.

Извините, но это то, что вы получаете, когда вы структурируете свои данные для MongoDB, как если бы это была база данных SQL.

Другие вопросы по тегам