Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Can';无法获取函数外部的查询结果_Mongodb_Coffeescript_Mongoose - Fatal编程技术网

Mongodb Can';无法获取函数外部的查询结果

Mongodb Can';无法获取函数外部的查询结果,mongodb,coffeescript,mongoose,Mongodb,Coffeescript,Mongoose,我在这个类中尝试使用查询结果初始化数组属性: class data minute: [] hour: [] constructor: () -> findMin = events.find({"aggr":"minute"}).sort({$natural:-1}).limit(120) findHour = events.find({"aggr":"hour"}).sort({$natural:-1}).limit(14) findMin.execFin

我在这个类中尝试使用查询结果初始化数组属性:

class data
minute: []
hour:   []
constructor:    () ->
    findMin = events.find({"aggr":"minute"}).sort({$natural:-1}).limit(120)
    findHour = events.find({"aggr":"hour"}).sort({$natural:-1}).limit(14)
    findMin.execFind (errMin, resMin) ->
        for recMin in resMin
            @minute.push recMin
    findHour.execFind (errH, resH) ->
        for recH in resH
            @hour.push recH

因此,我调用
smth=newdata()
console.log smth
,得到一个空属性和一个关于未定义没有“push”方法的错误。虽然我可以理解一个错误,但我无法理解为什么我的数组是空的。不要误解我的意思-我知道这个错误导致它们为空,但我尝试了几种变体。我读过acync和回调,但仍然不知道如何使用回调,不是为了“提醒”smth,而是在事后使用它。如果你能帮我做这件事或者提供一些链接,我会非常感激。

我想你希望
minute
hour
成为实例变量?它们必须在构造函数中初始化。按照您现在的操作方式,它们位于
原型上,因此无法正常工作。试试这个:

class data
  constructor:    () ->
    @minute = []
    @hour = []
    findMin = events.find({"aggr":"minute"}).sort({$natural:-1}).limit(120)
    findHour = events.find({"aggr":"hour"}).sort({$natural:-1}).limit(14)
    findMin.execFind (errMin, resMin) =>
        for recMin in resMin
            @minute.push recMin
    findHour.execFind (errH, resH) =>
        for recH in resH
            @hour.push recH

你有两个问题。导致您观察到的错误的原因是两个回调中的“@”未绑定到
数据
实例,因此您需要使用
=>
。其次,正如@AaronDufour所指出的,您的
hour
minute
数组是在类级别声明的,因此它们将在
数据的每个实例之间共享,我怀疑这是您想要的,所以您需要将它们移动到构造函数中

class data
  constructor: () ->
    @minute = []
    @hour = []

    findMin = events.find({"aggr":"minute"}).sort({$natural:-1}).limit(120)
    findHour = events.find({"aggr":"hour"}).sort({$natural:-1}).limit(14)

    findMin.execFind (errMin, resMin) =>
      for recMin in resMin
        @minute.push recMin
    findHour.execFind (errH, resH) =>
      for recH in resH
        @hour.push recH

谢谢你的回答,但没有用。它在使用undefined的push时抛出相同的错误。在这些DB函数中,“@minute”和“@hour”似乎与这些函数相关,就像它们是本地函数一样,而不是构造函数。@Eshnelbek检查我的更新代码。您需要一个胖箭头来保持正确的
@
。Thx你们两个,问题在于这个“胖箭头”