获取从mongodb收到的对象的属性

时间:2015-03-31 07:59:55

标签: javascript jquery mongodb object

我的mongodb中有一个警报集合.. 我希望得到我的警报模型中存在的对象的属性,我已经编写了以下代码....

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

在第一个控制台中,我获得了警报模型的所有对象, 但在第二个控制台中它是“未定义的”#39;甚至result.name也存在于模型中..

但_id是由mongodb本身生成的,我能够获得该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

无法解决问题,这样做的正确方法是什么。 提前致谢

2 个答案:

答案 0 :(得分:0)

此处没有问题,但您必须了解MongoDB find()方法会向符合查询条件的文档返回cursor。所以你在console.log(alerts)中看到的实际上是返回的光标。当find()方法“返回文档”时,该方法实际上是将光标返回到文档。所以你在第一个和第三个控制台输出中看到的是光标对象和属性。

您需要在Alert.find()操作的结果光标中添加toArray()方法,例如

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中并耗尽光标。

答案 1 :(得分:0)

我正在使用猫鼬.. 以上解决方案是应用lean()函数

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);
    });
});