SORT не работает в агрегатной функции - PullRequest
1 голос
/ 20 апреля 2020

У меня есть этот код для Mon go в Golang

    cond := make([]bson.M, 0)
    cond = append(condiciones, bson.M{"$match": bson.M{"userId": ID}})
    cond = append(condiciones, bson.M{
        "$lookup": bson.M{
            "from":         "invoices",
            "localField":   "userId",
            "foreignField": "userId",
            "as":           "sales",
        }})
    cond = append(condiciones, bson.M{"$unwind": "$sales"})
    cond = append(condiciones, bson.M{"$skip": skip})
    cond = append(condiciones, bson.M{"$limit": 100})
    cond = append(condiciones, bson.M{"$sort": bson.M{"dateInvoice": -1}})

    cursor, err := collect.Aggregate(context.TODO(), cond)

Я использую Golang и MongoDB

"go.mongodb.org/mongo-driver/bson"

это прекрасно работает в объединении, ограничить и пропуская документы, но сортировка $ не работает .. У меня есть счета, но они не упорядочены по 'dateInvoice'

Я в отчаянии .. Пожалуйста

Что не так в моем коде?

С уважением

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

У меня есть решение.

Вместо

cond = append(condiciones, bson.M{"$sort": bson.M{"dateInvoice": -1}})

Необходимо написать

cond = append(condiciones, bson.M{"$sort": bson.M{"sales.dateInvoice": -1}})

Поскольку сортировка $, попробуйте найти 'dateInvoice' в исходная коллекция 'users' и поле dateInvoice находятся в коллекции продаж.

0 голосов
/ 20 апреля 2020

Вы должны переместить $sort перед операциями $skip и $limit, иначе нет гарантии, что документы будут перечислены в том же порядке, когда запрос повторяется (необязательно с другими параметрами пагинации), что может результат в «случайных» результатах. $sort в конце только гарантирует, что ограниченные документы макс. 100 будут отсортированы.

Сначала выполняется сортировка, поэтому вы получаете согласованное поведение (при условии, что нет счетов-фактур с одинаковой отметкой времени dateInvoice).

...