@akamoroz

MongoDB: выборка последних значений

Добрый день.
Раз в секунду в MongoDB пишутся данные которые приходят, вот в таком формате:
{ 
    '_id' : 1,
    'info': [ 'c':768, 'd':345 ] 
}
{ 
    '_id' : 2,
    'info': [ 'e':333  ] 
}
{ 
    '_id' : 3,
    'info': [ 'c':353,  'e':113  ] 
}

Нужно сделать выборку по всем последним значениям в массиве info, отсортированным по _id (ужас...), короче, должно получиться:
[ 'c':353,  'e':113, 'd':345  ] 


Люди добрые, в какую сторону копать?
  • Вопрос задан
  • 4188 просмотров
Пригласить эксперта
Ответы на вопрос 3
В общем, при такой структуре:

{
	"_id" : 3,
	"info" : [
		{
			"k" : "c",
			"v" : 353
		},
		{
			"k" : "e",
			"v" : 113
		}
	]
}


Вот решение:

db.test.drop();
db.test.insert({
  "_id": 1,
  "info": [{"k": "c", "v": 768}, {"k": "d", "v": 345}]
});
db.test.insert({
  "_id": 2,
  "info": [{"k": "e", "v": 333}]
});
db.test.insert({
  "_id": 3,
  "info": [{"k": "c", "v": 353}, {"k": "e", "v": 113}]
});
db.test.find().forEach(printjson);

var res = db.test.aggregate([
  {$sort: {
    "_id": 1
  }},
  {$unwind: "$info"},
  {$group: {
    "_id": "$info.k",
    "v": {$last: "$info.v"}
  }}
]);

printjson(res);


Вот результат выполнения aggregation:

{
	"result" : [
		{
			"_id" : "e",
			"v" : 113
		},
		{
			"_id" : "d",
			"v" : 345
		},
		{
			"_id" : "c",
			"v" : 353
		}
	],
	"ok" : 1
}
Ответ написан
Assargin
@Assargin
Перед ответом смотрю наличие ✔ в ваших вопросах
Есть 2 пути:
1) использовать Aggregation Framework для построения запроса
2) ход конём: при поступлении данных сразу в другую коллекцию сразу записывать/обновлять ваши «последние значения по определенному ключу», с сохранением id записи исходной коллекции, в которой хранится это значение ключа. В таком случае для выборки вам нужно будет просто сделать простой запрос к этой доп.коллекции. Особенно хорошо это решение будет, если у вас ключей немного, причем настолько же хорошо, насколько глупо будет смотреться ворочание этой большой исходной коллекции-хранилища для получения последних значений нескольких десятков ключей…
Ответ написан
Что значит последнее значение?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы