从 Mongoose 检索 jsonObject

Posted

技术标签:

【中文标题】从 Mongoose 检索 jsonObject【英文标题】:retrieve jsonObject from Mongoose 【发布时间】:2017-07-26 05:22:48 【问题描述】:

我正在使用 NodeJs 和 MongoDB 以及基于猫鼬模式的模型来实现与服务器相关的 API。所以我之前的问题是here

'use strict';


mongoose = require('mongoose'),
Task = mongoose.model('Tasks');

exports.list_all_tasks = function(req, res) 
  Task.find(, function(err, task) 
    if (err)
      res.send(err);
    
    // console.log('Web Server started, waiting for connections...'+task);
    res.json(task);
  );
;

当我运行服务器时,它会像这样返回 jsonArray,

 [
  
   "_id": "58ba4c9c03e10b16d140775f",
   "name": "Noorul ahamed",
   "__v": 0,
   "status": [
   "pending"
  ],
   "Created_date": "2017-03-04T05:11:56.590Z"
 ,
 ....
 ...
 ...
]

这是我的疑问,

在上面的代码中,任务给出了这种响应。我如何获取该任务数组中的每个对象?我是否需要使用 for 循环从该数组中获取所有对象?我是 NodeJs 和 MongoDB 的新手。我的服务器结构很好。现在我被这个困住了。?我们将不胜感激。

更新

    // var myOwnObject = new mongoose.Schema( name: 'string', id: 'string',status:'string',createdDate:'String' );
    //      var myOwnObject = ;

    var dataArray;
    for (var i = 0; i < task.length; i++) 
        var userObject = task[i];
        myOwnObject.name=userObject.name;
        myOwnObject.id=userObject._id;
        myOwnObject.status=userObject.status[0];
        myOwnObject.createdDate=userObject.Created_date;
        dataArray[i]=myOwnObject;
     
    res.json(JSON.Stringify(dataArray));

错误

events.js:161 投掷者; // 未处理的“错误”事件 ^

TypeError:无法设置未定义的属性“名称” 在/home/noorulhasan/todoListApi/api/controllers/todoListController.js:17:29 在模型.查询。 (/home/noorulhasan/node_modules/mongoose/lib/model.js:3433:16) 在/home/noorulhasan/node_modules/kareem/index.js:273:21 在/home/noorulhasan/node_modules/kareem/index.js:127:16 在 _combinedTickCallback (内部/进程/next_tick.js:67:7) 在 process._tickCallback (internal/process/next_tick.js:98:9) [nodemon] 应用程序崩溃 - 启动前等待文件更改...

更新错误 当我尝试使用 myObject=

events.js:161 投掷者; // 未处理的“错误”事件 ^

TypeError:无法设置未定义的属性“0” 在/home/noorulhasan/todoListApi/api/controllers/todoListController.js:21:25 在模型.查询。 (/home/noorulhasan/node_modules/mongoose/lib/model.js:3433:16) 在/home/noorulhasan/node_modules/kareem/index.js:273:21 在/home/noorulhasan/node_modules/kareem/index.js:127:16 在 _combinedTickCallback (内部/进程/next_tick.js:67:7) 在 process._tickCallback (internal/process/next_tick.js:98:9)

更新

我得到了这种输出。如何摆脱'\'符号。

"[\"name\":\"Ahamed\",\"id\":\"58bac0fc2cf0894f071e41c0\",\"createdDate\":\"2017-03-04T13:28:28.759Z\"]

我尝试了以下方式。

    var jsonData=JSON.stringify(dataArray);
    var updateJson = jsonData.replace('"\"', "");
    res.json(JSON.stringify(updateJson));

但它添加了额外的符号,如下所示,

"\"[\\\"name\\\":\\\"Ahamed\\\",\\\"id\\\":\\\"58bac0fc2cf0894f071e41c0\\\",\\\"status\\\":\\\"pending\\\",\\\"createdDate\\\":\\\"2017-03-04T13:28:28.759Z\\\"]\""

【问题讨论】:

您的task 只是一个普通数组。您可以像使用任何普通数组一样访问其中的元素。您可以使用 task[n] 选择特定元素或使用任何类型的循环或迭代器函数。 @JyotmanSingh 感谢您的帮助。我尝试了上述方法。我更新了我的问题。 【参考方案1】:

您遇到的错误是由于 myOwnObject 未定义。您需要先初始化对象,然后才能开始设置它们的属性。您收到的错误提到

无法设置未定义的属性“名称”

这意味着myOwnObject 未定义,但您正在尝试设置myOwnObject.name

像这样初始化你的对象 -

var myOwnObject = ;

而不是

var myOwnObject;

错误现在应该消失了。

更新 - 对于第二个错误 -

同样的事情也适用于数组。您的 dataArray 未初始化。你需要像这样初始化它 -

var dataArray = [];

更新 2 -

您在输出中获得了\,因为您将 JSON 输出转换为单个字符串。要直接发送 JSON 数组,请移除 JSON.stringify() 方法。像这样发送响应 -

res.json(dataArray);    

【讨论】:

我正在使用 Atom 编辑器。是否有任何调试器工具可用于我的实现。 ?我无法追踪对象。那么,有什么方法对我有帮助。再次感谢您的帮助。 我已经尝试了 apm install atom-bugs 命令和 apm install atom-bugs-ui atom-bugs-syntax 进行调试。甚至有点麻烦。 不确定原子。我使用内置调试器的 intelliJ。 请分享ide的链接。 让我们continue this discussion in chat。

以上是关于从 Mongoose 检索 jsonObject的主要内容,如果未能解决你的问题,请参考以下文章