0

Учитывая следующую структуру данных, каков наиболее эффективный способ получения level для каждого character на основе их experience? Я знаю, что я мог магазин level с другими свойствами, но надеясь, что есть способ сделать это, не делая этого.Как правильно вычислить дочерние данные?

{ 
    "characters": { 
    "-k1239748": { 
     "name": "Ada", 
     "experience": 0 
    }, 
    "-k827493": { 
     "name": "Beth", 
     "experience": 2331 
    }, 
    "-k344432": { 
     "name": "Carol", 
     "experience": 4789 
    } 
    }, 
    "levels": { 
    "-k123433": { 
     "level": 1 
     "minimumExperience": 0 
    }, 
    "-k412312": { 
     "level": 2 
     "minimumExperience": 2000 
    }, 
    "-k113433": { 
     "level": 3 
     "minimumExperience": 4000 
    } 
    } 
} 

Ожидаемый результат будет:

ada.level = 1 
beth.level = 2 
carol.level = 3 

Мое предположение, что нет более простой способ, чем:

  • захватывая список characters
  • захватывая список levels в пределах complete block
  • it используя каждый из character и присваивая свойству character.level все, что я получаю, от какой-либо функции, которую я бы назвал getLevelForExperience(experience).

Я считаю, что это своего рода утомительным и ненужным, особенно когда приходит из SQL, где я мог бы просто сделать JOIN, или имеют некоторые вычисляемые свойства в C#, которые могут захватить значение из функции только тогда, когда это необходимо, и т.д. .

Что я ищу синтаксис для делать что-то вроде следующего:

this.af.database.list('/characters') 
    .map(characterResult => { 
    this.af.database.list('/levels').startAt(result.experience).first() 
     .subscribe(levelResult => { 
     result.level = levelResult; 
     }); 

    return characterResult; 
    }); 

Я использую некоторые псевдокод в середине выше блока, потому что я не уверен, что подходит, где, и независимо от того, что я не знаю, что это залог r, но я просто не могу окунуться в лучший способ получить такие значения эффективно, не дублируя избыточные данные в моей таблице на set или update.

Спасибо!

ответ

0

Я просто загрузил все уровни и выберет правильную клиентскую сторону.

Я бы также рассмотреть вопрос о хранении уровни немного по-другому, так как идентификаторы кажется, что они просто получить в пути в течение долгого времени:

"levels": { 
    "exp0": 1 
    "exp2000": 2 
    "exp4000": 3 
} 

Можно даже рассмотреть возможность использования массива здесь:

"levels": [0, 2000, 4000] 

Хотя вы должны компенсировать уровни одной или площадки с дополнительным нулем там:

"levels": [null, 0, 2000, 4000] 
+0

в качестве примера, как выше, я сократил некоторые данные, но уровни все имеют больше данных вместе с ним, поэтому сокращение до массива не будет работать. Независимо от того, я специально пытаюсь понять, как это выглядит, используя AngularFire2 и/или шаблон Observable в целом, используя внутренние подписки/карты и все такое. Не совсем структура схемы. Как и в случае, представьте себе, что у меня были данные о детях, которые мне нужно было оценить, вытаскивая каждого конкретного пользователя и отображая его вместе со списком пользователей. – bdrelling

Смежные вопросы