Проблема с порядком сбора БД Cosmos

Я пытаюсь заказать свою коллекцию, используя следующий запрос:

db.getCollection('trip').find().sort({'itinerary.0.timestamp': 1})

Результат неправильно сортируется, однако я экспортировал всю коллекцию в локальную базу данных mongoDB, и тот же запрос работает как шарм. Чтобы выполнить такую ​​сортировку в базе данных Cosmos, мне пришлось создать индекс 'itinerary.0.timestamp'.

пример данных:

{
    "_id" : ObjectId("6087104ca68f171ce7715448"),
    "tripId" : NumberLong(38533184),
    "itinerary" : [ 
        {
            "transId" : NumberLong(39800097),
            "timestamp" : NumberLong(1619372446291)
        }, 
        {
            "transId" : NumberLong(39800576),
            "timestamp" : NumberLong(1619372446321)
        }, 
    ],
    "results" : [],
    "tripTimeSent" : ISODate("2021-04-29T14:44:53.253Z")
}

Что мне не хватает? Спасибо!!


person Francisco Javier Garcia    schedule 28.04.2021    source источник
comment
Пожалуйста, покажите подробности вашего формата данных, чтобы мы могли попытаться воспроизвести ту же ошибку при тестировании :)   -  person Tiny Wang    schedule 29.04.2021
comment
Я добавил формат данных, может быть, это потому, что в этой коллекции 10 тысяч документов? Это должно быть что-то, связанное с космической БД, потому что с использованием тех же 10 КБ документов в локальной базе данных монго сортировка работает нормально.   -  person Francisco Javier Garcia    schedule 29.04.2021


Ответы (2)


Решение заключалось в создании нового поля itiTimestamp вне массива, содержащего значение «itinerary.0.timestamp». Тогда просто закажите через itiTimestamp

person Francisco Javier Garcia    schedule 29.04.2021

Это правда, что вам нужно создать индекс для поля сортировки. Вот документ, относящийся к:

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

==========================================

Я тестировал на своей стороне, после создания подстановочного индекса в маршруте запрос сортировки может быть выполнен, но безуспешно. Я также ссылаюсь на этот ответ(новый BasicDBObject(labels.0.value, 1)) и этот(db.testCollection.find().sort({someArray.0: 1})), все они не работают для формата даты, предоставленного Op.

Но когда я добавил свойство "score":[20,55,80] к каждому элементу коллекции, я обнаружил, что его можно сортировать по первому элементу при прямой сортировке по баллам.

введите здесь описание изображения

Я предполагаю, что эта функция не поддерживается.

person Tiny Wang    schedule 29.04.2021
comment
Я знаю, что мне нужно создать индекс, на самом деле я это сделал. Проблема в том, что результаты неправильно сортируются - person Francisco Javier Garcia; 29.04.2021