当前位置: 首页 > 知识库问答 >
问题:

mongodb的响应返回null或找不到特定文档

韶云瀚
2023-03-14

我正在建立一个登录系统,我遇到了一些问题,我不知道如何解决。我用find()和findOne()尝试了一些不同的选项,但在我的情况下两者都不起作用。下面是我试图解决这个问题的第一个解决方案。

router.post('/', async (req, res) => {
    try {
        const user = await User.find(User.username = req.body.user);
        if (req.body.pass == user.password)
            res.send('Login');
        else
            res.send('Passwords don\'t match');
    } catch {
        res.send('User Not Found');
    }
});

此解决方案返回catch响应:User Not found。

这是我尝试过的第二种解决方案:

router.post('/', async (req, res) => {
    try {
        const user = await User.find(User => User.username = req.body.user);
        if (req.body.pass == user.password)
            res.send('Login');
        else
            res.send('Passwords don\'t match');
    } catch {
        res.send('User Not Found');
    }
});

此解决方案返回:无法将属性“username”设置为null。

在这两种情况下,我都发送此请求:{“user”:“lasse”,“pass”:“lassemj”},它是我知道存在于我的数据库中的用户。

这是我的猫鼬模式:

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
    username: {type: String, required: true},
    password: {type: String, required: true}
});

module.exports = mongoose.model('Users', userSchema);

这是我的server.js

const express = require('express');
const bcrypt = require('bcrypt');
const mongoose = require('mongoose');
const userRoutes = require('./routes/users');
const loginRoutes = require('./routes/login');

if (process.env.NODE_ENV != 'production') {
    require('dotenv').config();
}

const app = express();
app.use(express.json());

app.use('/users', userRoutes);
app.use('/login', loginRoutes);


mongoose.connect(process.env.DB_CONNECTION, {
    useNewUrlParser: true,
    useUnifiedTopology: true 
 });
 const db = mongoose.connection;
 db.on('error', error => console.error(error));
 db.once('open', () => console.log('Connected to db'));

app.listen(3001);

共有1个答案

苗阳文
2023-03-14

在AFAIK中,find方法接收一个条件,以搜索作为JSON对象的文档。要按用户名搜索用户,语法应为:

     const user = await User.find({username : req.body.user});

注意,find方法将返回一个数组而不是对象,我们可以使用findone获取用户对象,如下所示:

     const user = await User.findOne({username : req.body.user});

在这种情况下,username在集合中应该是唯一的。

您可以从这里找到更多信息从猫鼬官方文件

 类似资料:
  • 文档存在,但筛选时不匹配! 您好,我在我的项目中发现了一个新错误。我正在使用nodejs后端和mongodb数据库。我正在成功插入文档。但有一个特定领域(“proje\u ortagi”)让我感到困惑。因为当我将文档过滤为“\u id”字段时。所有文件都在响应。但当我将文档过滤为“proje\u ortagi”时,有些文档并不是响应。为什么会发生这种情况?我检查“proje\u ortagi”值的

  • 我对Spring很陌生。我有一个在Spring中编写的REST api,但我不知道如何使用自定义http响应代码返回JSON响应。 我返回一个JSON响应,如下所示: 但它总是显示200个http ok状态代码。 如何可能在void函数中返回JSON响应和自定义HTTP代码?

  • 所以我开始和Morphia一起工作,我遇到了一个奇怪的问题。 get(moviedetails.class,id) 我得到null 当我使用:

  • 假设我收集了以下文档: 所有文档都将始终有“水果”字段 某些文档可能没有“attributes”数组 对于属性数组中包含元素的文档,它可以是1到20个元素 我需要根据属性返回这个。数量介于4和8之间 > 即使属性字段缺失或数量标准不匹配,也始终显示id和水果 在属性数组中最多只显示2个符合搜索条件的元素,按数量降序排序 {_id:1,水果:苹果,属性:[{颜色:红色,大小:小,数量:5}]}, {

  • 我正在试用新的Spring 4.0@RestController,以从控制器返回一个简单的文本响应: 当我访问/心跳时,我返回: 结果包括双引号,这是我没有想到的。 当我访问/heartbeat/test时,我会得到一个空响应,但我希望我还活着!文本 使现代化 卷曲-ihttp://myserver.com/rest/heartbeat HTTP/1.1 200 OK内容类型:applicatio

  • 使用Guzzle,我正在使用JSON格式的一些外部API,通常我获取数据 $data = $request- 但是我无法从这个不同的api中获取数据。数据似乎没有出现在“响应体”中。 这个api调用有效:https://i.ibb.co/80Yk6dx/Screenshot-2.png 这不起作用:https://i.ibb.co/C239ghy/Screenshot-3.png