MongoDB - mapReduce - Object.values不是一个函数

时间:2018-01-27 14:10:18

标签: javascript mongodb mapreduce nosql

以下是我的收藏的文档示例:

{
  "_id": "5a68a9308117670afc3522cd",
  "username": "user1",
  "favoriteItems": {
    "5a0c6711fb3aac66aafe26c6": {
      "_id": "5a0c6711fb3aac66aafe26c6",
      "name": "item1",
    },
    "5a0c6b83fd3eb67969316dd7": {
      "_id": "5a0c6b83fd3eb67969316dd7",
      "name": "item2",
    },
    "5a0c6b83fd3eb67969316de4": {
      "_id": "5a0c6b83fd3eb67969316de4",
      "name": "item3"
    }
  }
}

我正在使用mongoDB mapReduce功能来计算用户喜欢的项目次数。

这是我的map和reduce函数:

var mapFun = function () {
    Object.values(this.favoriteItems).forEach(item => {
        emit(item, 1)
    })
}

var redFun = function (item, values) {
    count = 0
    for(i = 0; i<values.length; i++) {
        count += values[i]
    }
    return count
}

但是,我收到错误Object.values不是函数:

2018-01-27T13:58:08.494+0000 E QUERY    [thread1] Error: map reduce failed:{
        "ok" : 0,
        "errmsg" : "TypeError: Object.values is not a function :\n@:2:5\n",
        "code" : 139,
        "codeName" : "JSInterpreterFailure"
}

1 个答案:

答案 0 :(得分:2)

Object.values是ES2017的一项功能。可能你的NodeJs版本已经过时且不支持该功能。

你可以,

  1. 升级NodeJs
  2. 使用babel来传输代码
  3. 使用Object.keys,然后使用该键引用值
  4. 像这样,

    Object.keys(this.favoriteItems).forEach((key)=>{
       let value = this.favoriteItems[key]
    })