Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   Версионность данных в MongoDB (https://javascript.ru/forum/library-toolkit-framework/43341-versionnost-dannykh-v-mongodb.html)

qspider 02.12.2013 09:59

Версионность данных в MongoDB
 
Здравствуйте!

Реализовал версионность данных в Mongo. Вот как это выглядит:
{ "_id" : ObjectId("5298267c5248490b026d3c8a"), "id" : 1, "uid" : 1, "name" : "Test 1" }
{ "_id" : ObjectId("529826855248490b026d3c8b"), "id" : 2, "uid" : 2, "name" : "Test 2" }
{ "_id" : ObjectId("529826b15248490b026d3c8d"), "id" : 3, "uid" : 2, "name" : "Test 2.1" }
{ "_id" : ObjectId("529834b45248490b026d3c8f"), "id" : 4, "uid" : 2, "name" : "Test 2.2" }
{ "_id" : ObjectId("529834c05248490b026d3c90"), "id" : 5, "uid" : 3, "name" : "Test 3" }
{ "_id" : ObjectId("529834c85248490b026d3c91"), "id" : 6, "uid" : 3, "name" : "Test 3.1" }
{ "_id" : ObjectId("529834d35248490b026d3c92"), "id" : 7, "uid" : 3, "name" : "Test 3.2" }

Т.е. есть uid некоторых данных (документов). При редактировании данных (документа с заданным uid) происходит запись нового документа в базу с заданным uid. В результате в коллекции несколько записей с одним и тем же uid (самая свежая с максимальным id). id уникален в рамках всей коллекции, а uid только для документа.

Теперь попытался написать запрос для получения всех документов с последней редакцией (т.е. с максимальным значением id).

Вот запрос: db.test.aggregate({$group : {_id:"$uid", "id":{$last:"$id"}}})
Результат запроса:
{"result" : [
{"_id" : 3,"id" : 7},
{"_id" : 2,"id" : 4},
{"_id" : 1,"id" : 1}
],"ok" : 1}

Здесь получаю список id документов (1,4 и 7). Теперь зная эти id могу получить сами документы.

А как написать запрос, чтобы сразу получить:
{ "_id" : ObjectId("5298267c5248490b026d3c8a"), "id" : 1, "uid" : 1, "name" : "Test 1" }
{ "_id" : ObjectId("529834b45248490b026d3c8f"), "id" : 4, "uid" : 2, "name" : "Test 2.2" }
{ "_id" : ObjectId("529834d35248490b026d3c92"), "id" : 7, "uid" : 3, "name" : "Test 3.2" }

Как написать такой запрос?

СПАСИБО!!!


Часовой пояс GMT +3, время: 08:45.