2015-03-31 78 views
0

收到我有一个警报集合中的mongodb我..我 希望得到本对象的属性在我的警示模式,我写了下面的代码....获得对象的属性从mongodb的

​​

在第一个控制台,我得到警报模型, 的所有对象,但在第二个控制台是“未定义”甚至result.name出现在模型..

而是由MongoDB中产生的_id本身和我能够得到该ID ..

From 1st console: 
    { __v: 0, 
    _id: 55128d3a1b35c366eb974285, 
    brand: 'SanDisk', 
    name: 'SanDisk Cruzer Blade 8 GB Pen Drives Black (Combo of 2)', 
    source: 
    { name: 'Snapdeal', 
     productId: '141951', 
     inStock: true} 
} 
From 2nd console: 
    Undefined 

From 3rd console 
    55128d3a1b35c366eb974285 

无法抽到了问题,什么是这样做的正确的方式..提前 感谢

回答

0

我是用猫鼬.. 和上述的解决方案是应用

Alert.find({}).lean().exec(function(err,alerts){ 
    if(err) 
     console.log(err); 
    console.log(alerts); 
    alerts.forEach(function(result){ 
     console.log(result.name); 
     console.log(result._id); 
    }); 
}); 
+1

你原来的问题,你用猫鼬Node.js的司机从来没有提过瘦()函数。 – chridam 2015-04-01 12:49:53

0

这里没有问题,但你要明白,MongoDB的find()方法返回一个cursor的文件与查询条件匹配。因此,您在console.log(alerts)中看到的实际上是光标返回。当find()方法“返回文档”时,该方法实际上是将光标返回到文档。因此,您在第一个和第三个控制台输出中看到的是游标对象和属性。

您需要将toArray()方法添加到从Alert.find()操作产生的光标,例如,

Alert.find({}).toArray(function(err, alerts){ 
    if(err) 
     console.log(err); 
    console.log(alerts); 
    alerts.forEach(function (result) { 
     console.log(result.name); 
     console.log(result._id); 
    }); 
}); 

toArray()方法返回一个包含所有从光标的文件的阵列。该方法完全遍历游标,将所有文档加载到RAM中并耗尽游标。