Запрос mongodb требует улучшений - PullRequest
0 голосов
/ 12 июля 2020

для данного параметра, я запрашиваю самую последнюю запись из коллекции следующим образом:

query = {'id': parameter}
doc = collection.find_one(query, sort=[('updated_at',-1)])

Как я могу получить самую последнюю запись для всех идентификаторов, присутствующих в коллекции, в одном запросе? На данный момент я перебираю параметр и объединяю вывод

INPUT : Коллекция имеет несколько записей / документов, например:

{
    id: "ABC",
    weight: 35, 
    updated_at: "2013-10-01T1:32:12.112Z" 
},
{
    id: "ABC",
    weight: 45, 
    updated_at: "2017-10-01T1:32:12.112Z" 
},
{
    id: "BAD",
    weight: 38, 
    updated_at: "2013-10-11T1:32:12.112Z" 
}

Output :

{
{
    id: "ABC",
    weight: 45, 
    updated_at: "2017-10-01T1:32:12.112Z" 
},
{
    id: "BAD",
    weight: 38, 
    updated_at: "2013-10-11T1:32:12.112Z" 
}
}

Решение : Если я построю трубопровод, как показано ниже. каков будет вес при использовании $ first

[
    { "$sort": { "id": 1, "updated_at": -1 } },
    { "$group": {
        "_id": "$id",
        "updated_at": { "$first": "$updated_at" },
        "weight": { "$first": "$weight" }

    }
]

1 Ответ

0 голосов
/ 12 июля 2020

Вам следует go для агрегирования , если вы хотите сделать это в одном запросе. Попробуйте выполнить следующий запрос:

db.collection.aggregate(
[
     {
       $group:
         {
           _id: "$id",
           maxWeight: { $max: "$weight" }
           recent: { $max: "$updated_at" }
         }
     }
   ]
)

Здесь вы группируете по полю « id » или « параметр ».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...