Mongo查询返回空数组

时间:2019-10-28 17:53:09

标签: node.js mongodb express

我是一个初学者,正在使用一个教程来学习MEAN堆栈的基础知识。我试图将数据库中的文档返回到网页,但是却收到一个空数组。

我在Mongodb Atlas上创建了一个名为mytasklist的集群。在这里,我创建了一个名为mytasklistdb的数据库。在其中有一个名为mytasklistdb.mytasklisttutorial的表(对象)。我对此的理解是有限的,所以也许我在这里的某个地方犯了一个巨大的错误。我有SQL的经验,但没有Mongo的经验,因此整个“集群”和“集合”对我来说是新的。

无论如何,我的代码如下。我从Mongo连接选项卡中获取了用于数据库连接的字符串。

var express = require('express');
var router = express.Router();
var mongojs = require('mongojs');
var db = mongojs('mongodb+srv://myusername:mypassword@mytasklist-qx0ka.mongodb.net/test?retryWrites=true&w=majority', ['mytasklisttutorial']);

router.get('/tasks', function(req, res, next){
    db.mytasklistdb.find(function(err, tasks){
        if(err){
            res.send(err);
        }
        res.json(tasks);
    });
});

module.exports = router;

我的数据库对象如下:

_id:5db5f1f31c9d440000c3e7fe
title:"Walk the dog"    -   this is a string
isDone:false      -     this is boolean

我只是得到一个空数组,但是在本教程中,那个家伙正在获取这些“文档”。我在做什么错了?

编辑:我意识到本教程示例的“任务”部分与一个名为“任务”的数据库有关。我的被​​称为“ mytasklistdb”。因此,我改变了这一点。我还在传递给mongojs的行中添加了一个带有我的集合名称的参数。

我已经更改了上面的代码以反映这一点

2 个答案:

答案 0 :(得分:1)

我的猜测是您没有传递查询,只是传递了find()方法中的回调,可能您需要执行以下操作:

db.tasks.find({},function(err, tasks){
    if(err){
        res.send(err);
    }
    res.json(tasks);
});

答案 1 :(得分:1)

解决方案是用我的数据库名称替换'task'和'test'。如下:

var express = require('express');
var router = express.Router();
var mongojs = require('mongojs');
var db = mongojs('mongodb+srv://James:Noentry1@mytasklist-qx0ka.mongodb.net/mytasklistdb?retryWrites=true&w=majority', ['mytasklisttutorial']);

router.get('/tasks', function(req, res, next){
    db.mytasklisttutorial.find(function(err, tasks){
        if(err){
            res.send(err);
        }
        res.json(tasks);
    });
});

module.exports = router;