MongoDB 的 Nodejs 驱动基础
在学着写mongodb,用的nodejs。这里我把坑先记录好,以后可以慢慢找。这篇文章也慢慢更,为了篇幅简洁,全部略去对错误的处理。
基础操作:
1.增
1 var mongo = require('mongodb').MongoClient 2 var name = { 3 city: 'Wuhan', 4 country: 'China' 5 } 6 mongo.connect('mongodb://localhost:27017/test', function(err, db) { 7 var collection = db.collection('docs') 8 collection.insert(name, function(err, data) { 9 console.log(JSON.stringify(name)) 10 db.close() 11 }) 12 })
插入很简单,inset即可。但是注意回调函数的第二个参数:data,并不是我们插入的数据,而是被包裹了的。这个例子中,我把data的属性名和值都打印出来,是这么个对象:
{ result: { ok: 1, n: 1 }, ops: [{ city: 'Wuhan', country: 'China', _id: 58 c3f78ea3104d15f8125564 }], insertedCount: 1, insertedIds: [58 c3f78ea3104d15f8125564] }
可以看出返回了插入后的各种信息,被插入的文档被ops包裹,并且是个数组。如果单个插入的话就是在数组第一个元素。
2.删
删除也是比较容易的,不过加了个查询的过程。上代码:
1 var mongo = require('mongodb').MongoClient 2 mongo.connect('mongodb://localhost:27017/test', function(err, db) { 3 var collection = db.collection('doc') 4 collection.remove({ 5 city: 'Wuhan' 6 }, function(err, data) { 7 db.close() 8 }) 9 })
使用remove,第一个参数是删除的条件,我们在这里删除具有city为Wuhan的条目。
3.查
具有删的经验的话,查也是容易的。
var mongo = require('mongodb').MongoClient mongo.connect('mongodb://localhost:27017/test', function(err, db) { var collection = db.collection('doc') collection.find({ "age": { "$gt": 30 } }, { name: 1, age: 1, _id: 0 }).toArray(function(err, doc) { db.close() }) })
我们这里使用了条件查找,第一个参数是查找出age大于30的条目,第二个是只返回name和age,不返回_id。第三个是回调函数,传入的第二参数是查找到的对象,以数组排列。如果没找到就返回空数组,找到几个条目返回几条。
4.改
update操作稍难。比较复杂。
var mongo = require('mongodb').MongoClient mongo.connect('mongodb://localhost:27017/test' , function(err, db) { var collection = db.collection('doc') collection.update({ city: 'Wuhan'' }, { $set: { province: 'Hubei' } }, function(err, data) { db.close() }) })
这是最简单的操作,先找出city为Wuhan的条目,然后将这些条目添加province为Hubei的键值对。
5.数组操作
暂时只用到了$push方法,肯定会越用越多,跟update方法类似,不过不用$set。
var mongo = require('mongodb').MongoClient mongo.connect('mongodb://localhost:27017/test', function(err, db) { var collection = db.collection('question') collection.update({ province: 'Hubei' }, { $push: { cities: 'Huangshi' } }, function(err, data) { db.close() }) })
这段可以将原本为
1 { 2 province: 'Hubei', 3 cities: ['Wuhan'] 4 }
的条目增加一个属性,变为
1 { 2 province: 'Hubei', 3 cities: ['Wuhan', 'Huangshi'] 4 }
这就是push操作。