Node.js 操作mongodb好不爽,有没有什么好的代码?

Node.js 操作mongodb好不爽,有没有什么好的代码?

Node 先要 require(‘mongodb’) 然后获取DB 对象 然后获取ObjectID

然后再new 一个db connection 还要设置是否一直链接

然后再DB open 然后再嵌套查找,然后再在callback里面返回数据 然后返回数据后,还要mongodb.close()

有没有好点的代码??囧 不想用:mongoose 之类的东东。

31 回复

当然可以!Node.js 操作 MongoDB 可以通过 mongodb 客户端库来实现。为了简化操作并提高可读性,我们可以使用现代 JavaScript 特性(如 async/await)来处理异步操作。下面是一个简单的示例代码,展示了如何连接到 MongoDB、插入文档、查询文档以及关闭连接。

首先,确保你已经安装了 mongodb 库:

npm install mongodb

接下来是示例代码:

const { MongoClient } = require('mongodb');

// MongoDB 的连接字符串
const uri = 'mongodb://localhost:27017';

// 数据库名称
const dbName = 'mydatabase';

async function main() {
    const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

    try {
        // 连接到 MongoDB
        await client.connect();
        console.log("Connected to MongoDB");

        // 获取数据库对象
        const db = client.db(dbName);

        // 插入一个文档
        const collection = db.collection('documents');
        const result = await collection.insertOne({ name: "John Doe", age: 30 });
        console.log("Document inserted with id:", result.insertedId);

        // 查询文档
        const docs = await collection.find({ name: "John Doe" }).toArray();
        console.log("Found documents:", docs);

    } catch (err) {
        console.error("An error occurred:", err);
    } finally {
        // 关闭连接
        await client.close();
        console.log("Connection closed");
    }
}

main().catch(console.error);

代码解释

  1. 引入模块

    const { MongoClient } = require('mongodb');
    
  2. 定义连接字符串和数据库名

    const uri = 'mongodb://localhost:27017';
    const dbName = 'mydatabase';
    
  3. 连接到 MongoDB

    await client.connect();
    
  4. 获取数据库对象

    const db = client.db(dbName);
    
  5. 插入文档

    const result = await collection.insertOne({ name: "John Doe", age: 30 });
    
  6. 查询文档

    const docs = await collection.find({ name: "John Doe" }).toArray();
    
  7. 关闭连接

    await client.close();
    

通过这种方式,你可以更简洁地管理异步操作,并且代码更具可读性和维护性。希望这对你有帮助!


有试过 mongoskin 吗?

嗯,正在看。感觉还不错。

为什么 Mongoose 又被抛弃了…

= =前面不配置你怎么连接数据库,我就比较喜欢mongoose,尤其是在存数据的时候,数据类型 在配置的时候就定义好了.

嗯,用是可以用。而且用起来挺爽的。只是想学习下。

试试mongolian,不过我还是建议用Mongoose,毕竟带了ODM的功能,用起来方便许多。

做过后端的话都应该想到ORM框架啊,mongoose不就很好么

要ORM还用什么mongodb啊?

nodejs的技术欢迎加群聊262658247

这个不是库的问题,是异步编程的问题

推荐async库,里面的waterfall可以解决你的问题

另外老赵的windjs我没太深入用,但也是用来解决此类问题的

喵的, 看来现在必须求代码了, MongoSkin 怎么好?

经验有限,师请雅正。一下是我个人的观点: 其实我并不觉得只有关系型数据库才能使用ORM,对象关系映射中的对象并不能笼统的指向为面向对象的关系型数据库。大多数程序语言都是面向对面或者基于对象,而数据库存储的都是数据,数据库端的CRUD都需要使用数据库提供的操作语言,而服务端要使用数据库的语言进行操作,程序语言的单一性受到了干扰,程序开发人员面临着其他语言的学习困扰。ORM用程序语言将数据库模型封装在程序中,让程序员以核心向心力的去关注程序的业务逻辑,由业务逻辑的改变而影响真实的数据。

那官方的 mongodb 模块问题主要在哪儿, 有具体的代码能介绍下么?

其实就用mysql挺好的。我用了mongodb就蛮后悔的了。mongodb在很多地方的性能其实不怎么高的。例如分页的时候。mongodb权威指南的上说通过其他查询条件代替直接skip的分页。但是这个不太现实。因为很多时候没办法直接替代。就算能替代,你也要面临着很复杂的逻辑。

所以在mongodb不够快的时候,你要想办法在mongodb上面加一层缓存。例如redis,或者是memcache.等等。

但是mongodb已经是内存大户了。你再加一层缓存。就很 郁闷了。还有就是在构造缓存的时候mongo没有mysql来得直接 mysql直接md5(sql)作为key,results作为data存到memcache里面就搞定了。

所以还不如mysql + 缓存来得直接 方面

综上 mysql + 缓存 在速度上应该够了,内存开销也能接受 而且也蛮直接的 而且还不用去学新的东西。而且在设计上,大部分人已经掌握mysql了,没有跨度,不用摸索新的数据库的“设计模式”

mongodb的连接不关闭, 持续连接应该没问题吧, 有没有这方面的专家.

其实都差不多,看怎么用了,我现在在用mongoskin

我一直用mongoskin, 觉得比较符合个人习惯,哈哈

想要小巧好用的话,mongojs也可以一试

直接操作mongodb的存储过程就好,很简单的事情

试用了一下,mongo-lite的感觉最好。 另,mongodb返回的就是js对象,有必要用orm么?

db.posts.insert({title: ‘first’}, function(err, doc){}); 跟在command界面的感觉一样,太舒服了

换用mongoskin了,mongo-lite不支持连接池,多个更新同时进行的时候,就会报错。 在mongoskin中使用bind后,也能使用和mongo-lite一样的代码风格

另,同时更新多个文档时,必须删除待更新对象的_id,否则总是失败

mongolian vs mongoskin?

这么老的帖子也顶。

以前一直mongoskin,后来发现他们也不怎么维护了。 玩一玩,用mongolian和 mongoskin确实足够了,等静下来,准备脚踏实地的写一个web app时,复杂性,就不是一个Blog那么简单了。

复杂性上来了,必要的数据结构文档最好写下来的,一旦落实到文档上,你会发现文档可以用mongoose写。 数据校验什么的,mongoose也可以很好的支持,何乐而不为呢?

一直都这么用,db连接最好在整个node运行期,推荐采用连接池来平协同工作。

当然可以!如果你想要简化Node.js操作MongoDB的流程,并且不想使用Mongoose等额外的库,你可以考虑使用mongodb库中的更现代的方法,例如使用Promises或async/await来处理异步操作。下面是一个简单的示例,展示了如何使用这些方法来简化你的代码。

示例代码

首先,确保你已经安装了mongodb库:

npm install mongodb

然后,你可以创建一个简单的文件(例如mongoExample.js)并添加以下代码:

const { MongoClient } = require('mongodb');

// MongoDB连接字符串
const uri = "your_mongodb_connection_string_here";

async function main() {
    const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

    try {
        await client.connect();
        console.log("Connected successfully to server");

        const database = client.db('your_database_name');
        const collection = database.collection('your_collection_name');

        // 插入数据
        const doc = { name: 'John Doe', age: 30 };
        const resultInsert = await collection.insertOne(doc);
        console.log(`Inserted document with _id: ${resultInsert.insertedId}`);

        // 查找数据
        const query = { name: 'John Doe' };
        const resultFind = await collection.findOne(query);
        console.log(`Found a document:`, resultFind);

    } catch (error) {
        console.error("Error occurred:", error);
    } finally {
        await client.close();
    }
}

main().catch(console.error);

解释

  1. 连接到MongoDB: 使用MongoClient类连接到数据库。通过传递正确的URI(your_mongodb_connection_string_here),你可以指定数据库地址。
  2. 插入文档: 使用collection.insertOne()方法将一个新文档插入到集合中。
  3. 查询文档: 使用collection.findOne()方法查询符合特定条件的文档。
  4. 错误处理: 使用try...catch块捕获和处理可能发生的错误。
  5. 关闭连接: 在所有操作完成后,使用client.close()关闭数据库连接。

这种方法使得代码更加简洁、易读,并且更容易维护。同时,它也避免了回调地狱,使异步操作更易于管理。希望这对你有帮助!

回到顶部