Я довольно новичок в Mongo, и у меня есть следующая задача:
Запуск Mongo 3.4.2.
Коллекция:
[
{
"docID": "aaa111",
"version": 1,
"somefield1": "abc"
},
{
"docID": "aaa111",
"version": 2,
"somefield1": "abc",
"somefield2": "abc"
},
{
"docID": "bbb222",
"version": 1,
"somefield1": "abc",
"somefield2": "abc"
},
{
"docID": "bbb222",
"version": 2,
"somefield1": "abc",
"somefield3": "abc"
},
{
"docID": "bbb222",
"version": 3,
"somefield2": "abc",
"somefield3": "abc"
}
]
Другими словами,документы с одним и тем же docID могут иметь разную «схему».
Для запроса запроса этой коллекции мне нужны документы, имеющие самую последнюю версию со всеми полями этих конкретных документов.
Вот что должен выводить запрос на основе вышеуказанной коллекции.выглядит так:
[
{
"docID": "aaa111",
"version": 2,
"somefield1": "abc",
"somefield2": "abc"
},
{
"docID": "bbb222",
"version": 3,
"somefield2": "abc",
"somefield3": "abc"
}
]
Я пытался использовать оператор $ aggregate следующим образом:
db.collection.aggregate(
[
{ $sort: { docID: 1, version: 1 } },
{ $group:
{
_id: "$docID",
latestVersion: { $last: "$version" }
}
}
]
)
, но это просто возвращает 2 поля, docID и последнюю версию.
Затем я попытался использовать оператор $ in для выбора из этой коллекции с помощью find (), где $ in принял бы вышеупомянутый запрос, однако одна проблема заключается в том, что $ in ожидает массив и, во-вторых, мне нужновыбрать документы, в которых docID и версия соответствуют результатам подзапроса.
Как получить все поля документов, имеющих docID и последнюю версию?
Любая помощь приветствуется.
Заранее спасибо.