【问题标题】:nodejs and mongoose return undefined when logging json data记录 json 数据时,nodejs 和 mongoose 返回 undefined
【发布时间】:2017-11-11 16:34:08
【问题描述】:

我有一个函数可以从 mongoose 表中返回 json 数据。它首先插入一个新帖子,然后通过 post._id 检索同一个帖子。

   dbConfig.newPost(post,id,function (err,post) {
         if(err) throw(err);
         dbConfig.getPostById(post._id,function (err,doc) {
            if(err) throw err;
            var data = JSON.stringify(doc);
             console.log(data);
             console.log(data._id);
         });

     });

查询将数据变量打印为 JSON 中的对象数组,但是当我尝试仅打印“data._id”时,它返回未定义。有谁知道我做错了什么? json数组的片段如下

[{"_id":"593ab877777ae318e4a35637","userPost":"savassge","_creator":{"_id":"592b8c2d0c28f01970ad4df7","username":"adrian"},"__v":0,"dateCreated":"2017-06-09T15:02:15.716Z"}]

【问题讨论】:

  • 试试 -- console.log(data[0]._id);

标签: javascript json node.js mongoose mongodb-query


【解决方案1】:

因为没有“data._id”。有“数据[0] ._id”。您正在尝试访问一个对象数组,而不是一个对象。

【讨论】:

  • 非常感谢它帮助我找到了真正的问题。我正在使用 find 方法返回不存在的对象数组。我使用了 findOne,它只返回一个文档。
【解决方案2】:

首先

var data 是一个字符串,不是对象也不是数组,因为您将JSON.stringify(doc) 的返回值分配给data 变量。 JSON.stringify() 方法将 JavaScript 值转换为 JSON 字符串:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

其次

您正在尝试访问您的 doc 数组的一个不存在的属性,正如您在问题中说明的该属性存在于您的数组中的每个对象中。为了打印每个对象的 _id 属性(假设这是您想要做的),您需要先遍历数组:

dbConfig.newPost(post, id, function (err, post) {
  if(err) throw(err);
  dbConfig.getPostById(post._id, function(err, data) {
    if(err) throw err;
    data.forEach(function(doc) {
      console.log(doc);
      console.log(doc._id);
    });
  });
});

【讨论】:

  • 非常感谢,但我的问题是我使用 find() 来检索文档而不是 findOne() 导致它返回一个对象数组
猜你喜欢
  • 2015-05-21
  • 2017-09-09
  • 2016-06-28
  • 2019-02-27
  • 1970-01-01
  • 2018-01-09
  • 2017-04-28
  • 2019-11-30
  • 2013-11-23
相关资源
最近更新 更多