Я пытаюсь найти способ сделать запрос, сортировку и фильтрацию на значения объекта (который снова является объектом) в документе mongo. Структура документа,Как выполнить запрос, сортировку и фильтрацию значений объекта в mongodb?
{
_id: '',
uid: '12345',
objects:{
dkey1: {
prop1: val1,
prop2: val2,
...
},
dkey2: {
prop1: val1,
prop2: val2,
...
},
dkey3: {
prop1: val1,
prop2: val2,
...
},
dkey4: {
prop1: val1,
prop2: val2,
...
}
...
}
}
objects
свойство может содержать 1000s объектов с динамическими ключами. Thery - это уникальные ключи, основанные на хеше. Когда я получаю эти объекты, я не хочу возвращать все. Я хочу запрашивать, сортировать, ограничивать, как это можно сделать, если они из разных документов. Например, если я скажу, что prop1 = val1
сортировать по prop2
предел 10
, запрос должен вернуть первые 10 под-объектов в objects
, где их prop1
- val1
, отсортированные по prop2
.
Я думаю, что это не может быть сделано с нормальным find
. Итак, я пытаюсь создать структуру агрегации. На первом этапе я буду соответствовать по uid
. Следующий? Я смущен. Вместо объектов с динамическими клавишами, если это массив объектов, я могу сделать $unwind
, и на последующих этапах я мог бы сделать фильтр по внутренним свойствам (prop1
, prop2
...), сортировка и применение предела и т. Д. Но проблема в том, что это не массив объектов. Если есть способ конвертировать значения объекта objects
в массив объектов, было бы проще. Я искал путь, но я не мог найти решение.
Я знаю, что структура не очень хорошая, и изменение схемы поможет мне. Но я в ситуации, я не могу ее изменить сейчас. Есть ли способ конвертировать значения objects
в массив объектов? Или существует другой способ достижения такого же результата с некоторыми другими этапами агрегации?