Набор данных MongoDB: пары не сокращаются или проблемы со сценарием - PullRequest
0 голосов
/ 21 октября 2018

Я новичок в программировании, mongoDB и изучении по ходу дела. Я пытаюсь mapreduce на наборе данных , используя mongoDB.До сих пор я конвертировал csv в json и импортировал его в mongoDB, используя компас.

В компасе данные теперь выглядят так:

_id     :5bc4e11789f799178470be53
    slug    :"bitcoin"
    symbol  :"BTC"
    name    :"Bitcoin"
    date    :"2013-04-28"
    ranknow :"1"
    open    :"135.3"
    high    :"135.98"
    low     :"132.1"
    close   :"134.21"
    volume  :"0"
    market  :"1500520000"
    close_ratio :"0.5438"
    spread  :"3.88"

Я добавил каждое значение какиндексы следующим образом, это правильный процесс, чтобы я мог выполнить mapreduce для данных?

db.testmyCrypto.getIndices () [{"v": 2, "ключ": {"_id": 1}, "имя": " id ","ns": "myCrypto.testmyCrypto"}, {"v": 2, "key": {"slug": 1}, "name": "slug_1", "ns": "myCrypto.testmyCrypto"}, {"v": 2, "ключ": {"символ": 2}, "имя": "символ_2", "ns": "myCrypto.testmyCrypto"}, {"v": 2, "ключ": {"name ": 3}," name ":" name_3 "," ns ":" myCrypto.testmyCrypto "}, {" v ": 2," key ": {" data ": 4}," name ":" data_4"," ns ":" myCrypto.testmyCrypto "}, {" v ": 2," key ": {" ranknow ": 4}," name ":" ranknow_4 "," ns ":" myCrypto.testmyCrypto "}, {"v": 2, "ключ": {"ranknow": 5}, "имя": "ranknow_5", "ns": "myCrypto.testmyCrypto"}, {"v": 2, "ключ":{"open": 6}, "name": "open_6", "ns": "myCrypto.testmyCrypto"}, {"v": 2, "key": {"high": 7}, "name":"high_7", "ns": "myCrypto.testmyCrypto"}, {"v": 2, "key": {"low": 8}, "name": "low_8", "ns": "myCrypto.testmyCrypto"}, {" v ": 2," key ": {" volume ": 9}," name ":" volume_9 "," ns ":" myCrypto.testmyCrypto "}, {" v ": 2," key ": {" market ": 10}," name ":" market_10 "," ns ":" myCrypto.testmyCrypto "}, {"v": 2, "key": {"close_ratio": 11}, "name": "close_ratio_11", "ns": "myCrypto.testmyCrypto"}, {"v": 2, "key": {"spread": 13}, "name": "spread_13", "ns": "myCrypto.testmyCrypto"}]

Я удалил вышеизложенное, и теперь я делаю следующее изссылка на карту - уменьшить.Это правильный вывод, кто-то?

> db.testmyCrypto.mapReduce(function() { emit( this.slug, this.symbol ); }, function(key, values) { return Array.sum( values ) },
... {
... query: { date:"2013-04-28" },
... out: "Date 04-28"
... }
... )
{
    "result" : "Date 04-28",
    "timeMillis" : 837,
    "counts" : {
        "input" : 0,
        "emit" : 0,
        "reduce" : 0,
        "output" : 0
    },
    "ok" : 1
}

Я добавил «пары ключ-значение», но мне кажется, что я ничего не могу получить из данных.

> db.testmyCrypto.mapReduce(function() { emit( this.slug, this.symbol, this.name, this.date, this.ranknow, this.open, this.high, this.low, this.close, this.volume, this.market, this.close_ratio, this.spread ); }, function(key, values) { return Array.sum( values ) }, { query: { slug:"bitcoin" }, out: "Date 04-28" } )

{"result": "Date 04-28", "timeMillis": 816,

"counts" : {
    "input" : 0,
    "emit" : 0,
    "reduce" : 0,
    "output" : 0
},
"ok" : 1 }

>

1 Ответ

0 голосов
/ 01 ноября 2018

если вы пытаетесь суммировать некоторые значения, тогда они должны быть числовыми (когда вы импортируете данные в монго, попробуйте установить тип для значений)

db.collectionName.mapReduce(
    function() { 
        emit( 
            this.slug, 
            this.open 
        ) 
    }, 
    function(keySlug, valueOpen) { 
        return Array.sum(valueOpen) 
    },
    {
        query: { date:"2013-04-28" },
        out: "Date 04-28"
    }
)

этот запрос вернет вам сумму открытых значений для каждого слагаотфильтровано по дате.

пс.вы можете сделать то же самое с агрегацией.

если у вас есть какие-либо вопросы, дайте мне знать.

...