Сортировать результат этапа поиска агрегации MongoDB, используя драйвер Java - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь получить пн go, чтобы вернуть список заказов для клиента . Где orders - это список (массив), добавленный к документу customer с использованием $lookup.

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

Я думаю, что мне может понадобиться использовать $unwind, но мне трудно понять, как интегрировать это в поиск и где его нужно разместить.

List<Bson> pipeline
        = Arrays.asList(
            new Document("$match", new Document("_id", new ObjectId(customerId))),
            new Document("$lookup",
                    new Document("from", "orders")
                            .append("localField", "_id")
                            .append("foreignField", "customer_id")
                            .append("as", "orders")));

Я посмотрел на Google и переполнение стека, но не смог найти ответ, который выглядел бы так, как будто бы он решил мою проблему.

Я бы хотел отсортировать заказы по date_raised, который находится в коллекции заказов, я присоединяюсь к клиентам.

1 Ответ

1 голос
/ 23 апреля 2020

Я не совсем уверен, какова ваша модель данных. С другой стороны, как насчет этого?

List<Bson> pipeline
        = Arrays.asList(
        new Document()
                .append("$match", new Document()
                        .append("_id", new Document("_id", new ObjectId(customerId)))
                ),
        new Document("$lookup",
                    new Document("from", "orders")
                            .append("localField", "_id")
                            .append("foreignField", "customer_id")
                            .append("as", "orders")));
        new Document()
                .append("$unwind", new Document()
                        .append("path", "$date_raised")
                ), 
        new Document()
                .append("$sort", new Document()
                        .append("date_raised", 1.0)
                )
);
...