Nodejs往mongodb内插入数据显示插入成功在mongo的shell里面使用db.test.find()却查询不到

Nodejs往mongodb内插入数据显示插入成功在mongo的shell里面使用db.test.find()却查询不到

小弟通过nodejs往mongodb内插入几条数据,提示插入成功。然后再通过nodejs以代码的形式去find()确实也能输出插入的那几条数据,但是通过mongodb的shell却不能查询出数据,请问是怎么回事,我是往test库内插入数据,应该没有插错数据库,我猜测是否插入的数据只是在内存中而没有持久化,请大家帮忙分析一下,谢谢了。

4 回复

Node.js 往 MongoDB 内插入数据显示插入成功但在 Mongo Shell 里查询不到

问题描述

通过 Node.js 向 MongoDB 插入数据时,提示插入成功。而在 Node.js 中通过代码查询确实可以找到这些数据。但通过 MongoDB 的 shell 进行查询时,却查找不到这些数据。怀疑是数据没有持久化到数据库中。

分析

  1. 检查数据库名称:确保你在 Node.js 中使用的数据库名称与 MongoDB shell 中使用的数据库名称一致。
  2. 检查集合名称:确保你在 Node.js 中插入的集合名称与 MongoDB shell 中查询的集合名称一致。
  3. 确认连接状态:确保 Node.js 代码与 MongoDB 正确连接。
  4. 确认数据是否真正插入:可以通过查看 MongoDB 日志来确认数据是否真正插入。

示例代码

假设你已经安装了 mongoosemongodb 模块:

npm install mongoose mongodb
Node.js 插入数据
const mongoose = require('mongoose');

// 连接 MongoDB
mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true, useUnifiedTopology: true });

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
    console.log('Connected to MongoDB');
});

// 定义一个简单的 Schema
const testSchema = new mongoose.Schema({
    name: String,
    age: Number
});

// 创建 Model
const TestModel = mongoose.model('TestModel', testSchema);

// 插入数据
const testData = [
    { name: 'Alice', age: 25 },
    { name: 'Bob', age: 30 }
];

TestModel.insertMany(testData, (err, result) => {
    if (err) {
        console.error(err);
    } else {
        console.log('Data inserted successfully:', result);
    }

    // 关闭连接
    mongoose.connection.close();
});
在 MongoDB Shell 中查询
mongo
use test;  // 切换到 test 数据库
db.test.find().pretty();  // 查询 test 集合中的数据

解决方法

  1. 检查数据库和集合名称:确保数据库和集合名称在 Node.js 和 MongoDB shell 中一致。
  2. 检查日志:查看 MongoDB 日志文件,确认数据是否真正插入。
  3. 重新启动服务:有时重启 MongoDB 服务可能会解决问题。

希望以上分析和示例代码能帮助你解决问题。如果还有其他疑问,请随时提问。


通过摸索,已经查到了,原来不能直接使用db.dbname.find();而通过db.collectionsName.find()找到了,不过还是有一点疑问,db.dbname.find()查找范围是什么?

我去,我这个脑子,db.xxx.find();这个xxx其实一直都是指collection。

你遇到的问题可能是由于数据库连接或事务处理方面的原因导致的。以下是一些可能的原因及解决方法:

  1. 确保数据库名称和集合名称正确

    • 确认你在代码中使用的数据库名称和集合名称与MongoDB shell中的名称一致。
  2. 检查是否使用了不同的数据库实例

    • 确认你的Node.js应用和MongoDB shell连接的是同一个MongoDB实例。
  3. 确认插入操作是否成功完成

    • 在Node.js中插入数据时,可以捕获错误并打印出来,确保插入操作没有报错。
  4. 确保MongoDB服务正在运行

    • 确认MongoDB服务正在运行,并且可以通过shell连接到它。
  5. 检查是否有权限问题

    • 确认当前用户对test数据库有足够的读写权限。

示例代码

const MongoClient = require('mongodb').MongoClient;

async function insertData() {
    const uri = "mongodb+srv://<username>:<password>@cluster0.mongodb.net/test?retryWrites=true&w=majority";
    const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
    
    try {
        await client.connect();
        console.log("Connected to MongoDB");

        const db = client.db("test");
        const collection = db.collection("test");

        const docs = [
            { name: "Alice", age: 25 },
            { name: "Bob", age: 30 }
        ];

        const result = await collection.insertMany(docs);
        console.log(`Inserted ${result.insertedCount} documents`);
        
        // 确认插入的数据是否可以找到
        const findResult = await collection.find({}).toArray();
        console.log(findResult);

    } catch (err) {
        console.error("Error:", err);
    } finally {
        await client.close();
        console.log("Disconnected from MongoDB");
    }
}

insertData();

解释

  • 使用 MongoClient 连接到MongoDB数据库。
  • 捕获并处理可能发生的错误。
  • 插入文档后立即查询并打印结果,确认数据已正确插入。

如果以上方法仍然无法解决问题,请进一步检查MongoDB日志文件,查看是否有相关的错误信息。

回到顶部