mam schematu MongoDB, który wygląda mniej więcej tak:MongoDB listy - dostać każdy n-ty element
[
{
"name" : "name1",
"instances" : [
{
"value" : 1,
"date" : ISODate("2015-03-04T00:00:00.000Z")
},
{
"value" : 2,
"date" : ISODate("2015-04-01T00:00:00.000Z")
},
{
"value" : 2.5,
"date" : ISODate("2015-03-05T00:00:00.000Z")
},
...
]
},
{
"name" : "name2",
"instances" : [
...
]
}
]
gdzie liczba przypadków dla każdego elementu może być dość duża.
Czasami chcę uzyskać tylko próbkę danych, czyli pobrać co trzecią instancję lub co 10 instancję ... otrzymasz obraz.
Osiągam ten cel, pobierając wszystkie wystąpienia i filtrując je w moim kodzie serwera, ale zastanawiałem się, czy istnieje sposób, aby to zrobić za pomocą kwerendy agregacji.
Wszelkie pomysły?
Updated
Przyjmując strukturę danych był płaski jak @SylvainLeroux sugerowane poniżej, to jest:
[
{"name": "name1", "value": 1, "date": ISODate("2015-03-04T00:00:00.000Z")},
{"name": "name2", "value": 5, "date": ISODate("2015-04-04T00:00:00.000Z")},
{"name": "name1", "value": 2, "date": ISODate("2015-04-01T00:00:00.000Z")},
{"name": "name1", "value": 2.5, "date": ISODate("2015-03-05T00:00:00.000Z")},
...
]
będzie zadaniem coraz każdy element jest n-tym konkretnym name
(z) będzie łatwiej?
FWIW: _ "liczba instancji dla każdego elementu może być dość duża." _ Może użycie wbudowanego dokumentu nie jest dobrym pomysłem, jeśli liczba dokumentów jest tak duża, że w końcu osiągnie limit 32 MB. Ponadto, jeśli regularnie masz dostęp do podzbioru tej "wielkiej" tablicy, być może jest to inna wskazówka, że schemat nie jest właściwy. Nie znając twoich dokładnych potrzeb, pomyślałbym o czymś bardziej podobnym do '{" name ":" name1 ", value: 1, date: ...}, {" name ":" name1 ", value: 2, date: ...}, ... 'Z tym schematem, możesz nawet (ab) użyć pola _id, aby wybrać próbkę * obciążonego * danych. –
@SylvainLeroux, wystąpienia dzielą się czymś więcej niż tylko nazwą (uprościłem schemat dla tego celu pytania). Nie chcę, aby każda instancja zawierała zasadniczo te same dane, co inne, więc mam obiekt nadrzędny z wieloma instancjami. W ten sposób miałeś dla mnie więcej sensu. Ale jestem otwarty na sugestie ... – yarons