2015-03-31 81 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中並耗盡遊標。