NeDB是一个使用Node.js实现的NoSQL嵌入式数据库操作模块。它可以充当内存数据库,或者用于实现本地存储,甚至可以在浏览器中使用。查询方式相对灵活,支持使用正则表达式、比较运算符、逻辑运算符、索引、JSON深度查询等,适用于不需要大量数据处理的应用系统。本节将从一个demo开始,逐步描述NeDB的创建和使用。安装NeDB使用npm安装NeDB,执行以下命令:$npminstallnedb--save创建NeDB数据库导入依赖首先,使用require导入nedb:varNeDB=require('nedb')数据库初始化接下来,我们需要初始化一个NeDB对象:vardb=newNeDB({filename:'./user.db',autoload:true,})在初始化数据库的时候,我们传入两个参数:filename和autoload。第2行,filename用于指定数据存储的文件位置。本例中指定filename为同目录下的user.db;在第3行中,将autoload设置为true以自动加载数据库。至此,我们得到了一个数据库对象db。接下来,对数据库进行正常的操作:插入、查询、更新、删除。数据操作insert在数据库中插入一条数据:db.insert({name:'Alice',age:20,rank:1,},function(err,doc){console.log('inserted:',doc)})上面代码中insert方法接收两个参数,一个是插入的数据doc,一个是插入后的回调函数callback;在第2-4行中,doc在本例中是一个Object对象。其实doc也可以是Number、Boolean、String、Date、Null等基本类型,也可以是Array类型;在第5-7行中,callback接收两个参数,err和doc。err表示插入错误,doc表示插入的数据。查询查询数据,我们使用find方法:db.find({name:'Alice',},function(err,docs){console.log('Alicefound:',docs)})同样,find方法同样接收两个参数:查询条件query和回调函数callback。第2行查询参数除了接受Object类型外,还支持其他更高级的查询形式;在第3-5行中,回调接收两个参数:err和docs。err表示查询错误,docs表示查询到的数据。更新使用更新方法将Alice的年龄更改为21岁:db.update({name:'Alice',},{$set:{age:21,},},function(err,n){console.log('docsupdated:',n)})与前面两种方法不同。update方法传入更多的参数。本例中接收三个参数,即匹配条件查询、更新数据updateDoc和回调函数callback。query和find方法一样,我们重点关注updateDoc和callback。第4-6行,毫无疑问{age:21}就是需要更新的数据,那么$set*的作用是什么呢?我们在更新数据的时候,有时候可能需要更新整个金额,但是大多数时候我们只需要替换指定的字段即可;这个*$set意味着只更新指定的字段。第7-9行,同理,callback的第一个参数err表示更新错误,第二个参数n表示更新次数。现在,让我们查询数据以查看Alice的年龄是否已按要求更新:db.find({name:'Alice',},function(err,docs){console.log('Alicechanged:',docs)})Delete最后使用remove方法删除Alice的数据:db.remove({name:'Alice',},function(err,n){console.log('docsdeleted:',n)})removemethod的接收到的参数与find方法类似,这里不再赘述。需要注意的是回调函数接受的第二个参数n是要删除的个数,不是删除的数据。同样,我们也使用find方法来验证数据是否被删除:db.find({name:'Alice',},function(err,docs){console.log('Aliceremoved:',docs)})运行demo最后我们运行demo.js来体验数据从创建到删除的过程。打开终端,执行:$nodedemo.js在终端中可以看到如下输出:inserted:{name:'Alice',age:20,rank:1,_id:'6YB3yV31XIvknXMm'}Alicefound:[{name:'Alice',age:20,rank:1,_id:'6YB3yV31XIvknXMm'}]docsupdated:1Alicechanged:[{name:'Alice',age:21,rank:1,_id:'6YB3yV31XIvknXMm'}]docsdeleted:1Aliceremoved:[]这样,我们就成功运行了一个完整的nedb示例。附录更多Node.js技术文章,请访问:Node.js小册子订阅更新,获取更多学习资料,请关注我们的微信公众号:
