无法从MongoDB中获取的数据访问JSON值

时间:2016-07-26 07:27:28

标签: javascript node.js mongodb mongoose

早上好,我有最奇怪的事情。我希望有人可以帮助我。

我从MongoDB获取数据(通过Mongoose)非常简单的结果

   {
      reqts: 1469468008496
   }

我正在尝试访问属性reqts但它未定义。但上面的结果非常清楚它的存在。

我正在做的是以下

   // This gives me the above result, but doing data.reqts gives me nothing. 
   Couple.findOne().sort('-reqts').select('reqts -_id').exec(function(err, item) {
        var data = item
        response.json(data)
    });

这给了我之前提到的对象。如果我这样做:

    var data = item.reqts

它没有给我任何回报(响应是空的)。

希望有人可以帮助我。 谢谢!

更新: 我现在正在写控制台。

    Couple.findOne().sort('-reqts').select('reqts -_id').exec(function(err, data) {
       if (err) { response.status(500).json({error: err}) }
       else {
           console.log(typeof data)
           console.log(data)
           console.log(data.reqts)
           response.json(data)}
    });

这是它写入控制台的内容。

object
{ reqts: 1469468008496 }
undefined

更新:

这似乎解释了它:Dot operator not fetching child properties of a Mongoose Document object

1 个答案:

答案 0 :(得分:1)

正如你已经说过的那样 - 你忘了定义方案。所以下一个代码正在运行

var mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1:27017/so');

var Couple = mongoose.model('Couple', { reqts: Number });

var couple = new Couple({ reqts: 1469468008496 });
couple.save(function (err) {
    if (err) {
        console.log(err);
    } else {
        Couple.findOne().sort('-reqts').select('reqts -_id').exec(function(err, data) {
            console.log(data.reqts);
        });
    }
});

但我必须说有解决这个问题的办法。您可以使用data._doc访问模型中未定义的字段,以便下一个代码也能正常工作:

var mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1:27017/so');
var treet = require('treet');

var Couple = mongoose.model('Couple', {ts: Number}); // no reqts, we even can use {}

Couple.findOne().sort('-reqts').select('reqts -_id').exec(function(err, data) {
    console.log(data._doc.reqts);
});

我认为未定义的字段隐藏是为了更简单地将文档发送到输出而无需额外选择必需的字段。