从 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的主要内容,如果未能解决你的问题,请参考以下文章

如何从mongoose查询中检索值

如何在 Mongoose NodeJS 中使用聚合从数组中检索特定元素

在递归节点函数中从 Mongoose 检索树数据

如何使用 Autopopulate Mongoose Mongodb 选择要检索的字段?

mongoose 从集合中获取所有返回一个空列表

mongoose 文档Models