Как обновлять и накапливать документы в MongoDB? - PullRequest
0 голосов
/ 18 октября 2018

У меня есть данные, загруженные из API, который содержит годовые данные (252 дня).Каждый день он будет обновлять значения в новый день.Например (предполагается, что данные возвращаются только за 2 дня), сегодня API вернул t, t-1.Затем, tmr, API вернет t, t + 1.

Как я могу обновить базу данных в mongodb для хранения данных от t-1 до t + 1?Я пробовал $ addToSet и $ Push.Вот пример документа:

{
    "_id" : ObjectId("5bc838e7af72c90c5c2550df"),
    "Ticker" : "AAPL",
    "Daily" : [ 
        {
            "date" : "2017-10-17",
            "open" : 157.4,
            "high" : 158.4738,
            "low" : 156.8582,
            "close" : 158.0798,
            "volume" : 18997275,
            "unadjustedVolume" : 18997275,
            "change" : 0.581211,
            "changePercent" : 0.369,
            "vwap" : 157.654,
            "label" : "Oct 17, 17",
            "changeOverTime" : 0
        }, 
        {
            "date" : "2017-10-18",
            "open" : 158.0305,
            "high" : 158.3162,
            "low" : 157.2227,
            "close" : 157.3803,
            "volume" : 16374164,
            "unadjustedVolume" : 16374164,
            "change" : -0.699423,
            "changePercent" : -0.442,
            "vwap" : 157.7015,
            "label" : "Oct 18, 17",
            "changeOverTime" : -0.00442498029476252
        }}

Но, когда я загружаю данные из API на следующий день и использую обновление для обновления документов:

db.getCollection('HistoricalData').update(
{"Ticker":'AAPL'},
{"$addToSet":{"Daily":[{'date': '2017-10-18',
   'open': 158.0305,
   'high': 158.3162,
   'low': 157.2227,
   'close': 157.3803,
   'volume': 16374164,
   'unadjustedVolume': 16374164,
   'change': -0.699423,
   'changePercent': -0.442,
   'vwap': 157.7015,
   'label': 'Oct 18, 17',
   'changeOverTime': -0.004424980294762521},
  {'date': '2017-10-19',
   'open': 154.4152,
   'high': 154.7403,
   'low': 152.7109,
   'close': 153.6567,
   'volume': 42584166,
   'unadjustedVolume': 42584166,
   'change': -3.7237,
   'changePercent': -2.366,
   'vwap': 153.4613,
   'label': 'Oct 19, 17',
   'changeOverTime': -0.027980172039691376}]}},
{"upsert":true}
)

Это даст мненовый документ, вставленный как элемент в список.Пока что хочу:

{
    "_id" : ObjectId("5bc838e7af72c90c5c2550df"),
    "Ticker" : "AAPL",
    "Daily" : [ 
        {
            "date" : "2017-10-17",
            "open" : 157.4,
            "high" : 158.4738,
            "low" : 156.8582,
            "close" : 158.0798,
            "volume" : 18997275,
            "unadjustedVolume" : 18997275,
            "change" : 0.581211,
            "changePercent" : 0.369,
            "vwap" : 157.654,
            "label" : "Oct 17, 17",
            "changeOverTime" : 0
        }, 
        {
            "date" : "2017-10-18",
            "open" : 158.0305,
            "high" : 158.3162,
            "low" : 157.2227,
            "close" : 157.3803,
            "volume" : 16374164,
            "unadjustedVolume" : 16374164,
            "change" : -0.699423,
            "changePercent" : -0.442,
            "vwap" : 157.7015,
            "label" : "Oct 18, 17",
            "changeOverTime" : -0.00442498029476252
        },
{'date': '2017-10-19',
   'open': 154.4152,
   'high': 154.7403,
   'low': 152.7109,
   'close': 153.6567,
   'volume': 42584166,
   'unadjustedVolume': 42584166,
   'change': -3.7237,
   'changePercent': -2.366,
   'vwap': 153.4613,
   'label': 'Oct 19, 17',
   'changeOverTime': -0.027980172039691376}]}
}
...