【问题标题】:MongoDB - mapReduce - Object.values is not a functionMongoDB - mapReduce - Object.values 不是函数
【发布时间】:2018-01-27 14:10:17
【问题描述】:

这是我收藏的文档示例:

{
  "_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 is not a function:

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"
}

【问题讨论】:

  • 你使用的 NodeJs 版本是什么?
  • v8.9.4 是 LTS。我是否需要节点 9.4.0 才能使用 Object.values()?

标签: javascript mongodb mapreduce nosql


【解决方案1】:

Object.values 是 ES2017 的一个特性。可能您的 NodeJs 版本太旧,不支持该功能。

你也可以,

  1. 升级 NodeJs
  2. 使用 babel 转译代码
  3. 使用Object.keys,然后使用key来引用值,

像这样,

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

【讨论】:

  • 感谢您的澄清。我选择了选项 3,它奏效了。
猜你喜欢
  • 2019-01-06
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 2011-07-30
  • 2021-04-07
相关资源
最近更新 更多