Nodejs 有没有类似 MongoDB 但可以存为项目下一个文件的数据库?

Nodejs 有没有类似 MongoDB 但可以存为项目下一个文件的数据库?

看到 LevelDB 的新闻, 发现挺好玩的键值对数据库 http://dailyjs.com/2013/05/03/leveldb-and-node-2/ 我尝试了下 levelup, 感觉就跟玩 JSON 或者 localStorage 似的, 几行代码就搞定了 不过 API 相对简单, 没有索引功能, MongoDB 能轻松做的事情做不了 挺想有个工具, 可以存放在项目路径下, 也能检索, 也支持大数据量的. 不知道现成的工具有没有? 如果用 JSON 自己实现个带索引的, 性能上会不会很差呀?


14 回复

针对您的问题,Node.js 中确实存在一些类似于 MongoDB 的数据库解决方案,但它们通常将数据存储在文件系统中,而不是像 MongoDB 那样使用独立的服务器。一个流行的选项是 LevelDB,它可以通过 levelupleveldown 这两个库来与 Node.js 集成。LevelDB 是一个键值对数据库,非常适合用于存储大量数据,并且支持高效的读写操作。

示例代码

首先,确保安装了所需的依赖包:

npm install levelup leveldown

然后,您可以使用以下代码来创建、读取和更新数据:

const level = require('level');
const db = level('./mydb', { valueEncoding: 'json' });

// 插入数据
db.put('key1', { name: 'Alice', age: 30 }, function (err) {
  if (err) return console.log('Ooops!', err); // Oops! Something went wrong
  console.log('Data inserted successfully!');
});

// 查询数据
db.get('key1', function (err, value) {
  if (err) return console.log('Ooops!', err); // Key not found
  console.log(value); // { name: 'Alice', age: 30 }
});

// 更新数据
db.put('key1', { name: 'Bob', age: 25 }, function (err) {
  if (err) return console.log('Ooops!', err);
  console.log('Data updated successfully!');
});

// 删除数据
db.del('key1', function (err) {
  if (err) return console.log('Ooops!', err); // Error in deletion
  console.log('Data deleted successfully!');
});

解释

  • levelupleveldown 提供了一个简单的接口来操作 LevelDB
  • valueEncoding: 'json' 表示我们希望将值编码为 JSON 格式,这使得存储复杂对象变得容易。
  • put, get, del 方法分别用于插入、查询和删除数据。
  • 键值对存储方式使得数据结构相对简单,不支持复杂的查询(如 MongoDB 的索引和聚合)。

虽然 LevelDB 缺少一些高级功能,例如复杂的查询和索引,但它非常适合需要高效存储和检索大量键值对的应用场景。如果您需要更复杂的数据查询功能,可能需要考虑其他解决方案,比如将数据存储在 JSON 文件中并自行实现索引逻辑。


SQLite ?

新浪微博@题叶是楼主吗

新浪微博@题叶是楼主吗

新浪微博@题叶是楼主吗

是的… 我只回一次…

也应该是这样的东西… 不知道 JS 支持好不好, 模块两年没更新 - -! https://github.com/grumdrig/node-sqlite

SQLite客户端用滴

不用这么激动吧 ……

https://github.com/louischatriot/nedb 终于让我给盼到了, Up!

// In-memory only datastore
var Datastore = require('nedb')
  , db = new Datastore();

// Persistent datastore var Datastore = require(‘nedb’) , db = new Datastore({ filename: ‘path/to/datafile’ });

// Persistent datastore for a Node Webkit app called ‘nwtest’ // For example on Linux, the datafile will be ~/.config/nwtest/nedb-data/something.db var Datastore = require(‘nedb’) , db = new Datastore({ filename: ‘something.db’, nodeWebkitAppName: ‘nwtest’ });

db.loadDatabase(function (err) { // Callback is optional // err is the error, if any });

// Of course you can create multiple datastores if you need several // collections. For example: db = {}; db.users = new Datastore(‘path/to/users.db’); db.robots = new Datastore(‘path/to/robots.db’);

// You need to load each database (here we do it asynchronously) db.users.loadDatabase(); db.robots.loadDatabase();

刚看到边上的帖子, 话说这东西能不能拿应用平台上去代替 MongoDB 的?

nedb 这个东西不错,对小的CRUD应用足够了。

针对您的需求,您可以考虑使用 nedb 这个库。nedb 是一个嵌入式的持久化数据库,类似于 MongoDB,但它可以将数据存储在一个文件中。它支持索引、查询等功能,并且易于集成到 Node.js 项目中。

示例代码

首先安装 nedb

npm install nedb

然后您可以编写以下代码来使用 nedb

const Datastore = require('nedb');
const db = new Datastore({ filename: 'mydb.data', autoload: true });

// 插入数据
db.insert({ name: 'Alice', age: 25 }, function(err, newDoc) {
  console.log(newDoc);
});

// 查询数据
db.find({ name: 'Alice' }, function(err, docs) {
  console.log(docs);
});

// 更新数据
db.update({ name: 'Alice' }, { $set: { age: 26 }}, {}, function(err, numReplaced) {
  console.log(numReplaced);
});

// 删除数据
db.remove({ name: 'Alice' }, {}, function(err, numRemoved) {
  console.log(numRemoved);
});

解释

  • 初始化数据库:创建一个新的 Datastore 实例并指定文件名(mydb.data)。
  • 插入数据:使用 insert 方法插入新文档。
  • 查询数据:使用 find 方法根据条件查找文档。
  • 更新数据:使用 update 方法更新符合条件的文档。
  • 删除数据:使用 remove 方法删除符合条件的文档。

nedb 在处理大量数据时性能相对较好,同时提供了 MongoDB 类似的 API,使得从 MongoDB 迁移到 nedb 变得更加容易。希望这能满足您的需求!

回到顶部