- collection.js源码分析,代码地址:https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/collection.js
Collection(db, collectionName, pkFactory):
一个构造函数,主要由三个重要的fields: db, collectionName, pkFactory.
insert(docs, options, callback):
Collection的方法,最主要的任务就是检查参数,特别当第一个参数docs不是数组的时候,要套上[]成为一个数组类型的参数,然后调用insertAll。
checkCollectionName(collectionName):
主要就是检查collection name是否合乎要求,比如它必须是一个String类型、不能为空字符串等等。
remove(selector, options, callback):
构造DeleteCommand,然后执行db中的executeCommand方法,如果options中设定safe为true则还会调用db的error方法,检查last error返回的状态。
rename(collectionName, callback):
更改collection的名字,首先还是调用checkCollectionName检查参数collectionName是否合法,然后则会调用db的renameCollection方法做实际的操作。
insertAll(docs, options, callback):
构造InsertCommand,对参数docs数组中的没一个元素检查其是否已经拥有了一个_id,如果没有则调用pkFactory的createPk产生一个,需要调用insertCommand的add放将每一个整理后的doc插入进去,然后执行db中的executeCommand方法,callback的第二个参数返回的插入的docs数组(包含了_id)。
save(doc, options, callback):
如果doc已经包含了_id,则会调用update方法,根据第一个参数是_id选择符,第二个参数使用upsert为ture和根据options决定的safe的值;如果doc不包含_id,则调用insert方法,第一个参数是doc,第二个参数则是根据options设置safe的值。也就是说save会根据doc是否包含_id来决定是继续调用update还是insert方法。
update(spec, document, options, callback):
参数spec就是一个选择符,就是根据它来查找符合更新条件的document,第二个参数决定了要将查找到document更新成什么样子,第三个参数用来设定upsert, multi和safe的值,upsert如果为ture,那么当update没有找到符合spec条件的记录的时候会将document插入作为新的document,multi为ture则会更新所有符合spec条件的document,safe为ture,则会调用get last error来判断是否执行成功;首先会构造UpdateCommand,然后调用db的executeCommand方法。
distinct(key, query, callback):
参数key决定根据什么来去重,query就是一个查询符合条件的document,也是调用db的executeCommand来做具体的事情。
count(query, callback):
计数功能,构造QueryCommand然后调用db的executeCommand做具体的事情
drop(callback):
调用db的dropCollection来drop一个collection
findAndModify(query, sort, update, options, callback):
query就是一个查询条件,起一个过滤作用,sort对查询的document排序,会选择第一个进行下面的事情,update决定了要修改成什么样子,options主要就是设定remove(Modify起到删除作用), new(返回修改后的document)和upsert(不存在则插入新的记录)选项;也是构造一个QueryCommand然后调用db的executeCommand方法。
find:
参数不固定,但是大概有三类,一个是选择条件selector,二是一个选项,比如limit, sort, fields, skip等等,三则是callback函数;如果有selector则一定作为第一个,如果有callback则一定作为最后一个,中间的那些就是options了;主要就是构造了一个Cursor然后返回给callback等待调用它的方法取下面的数据。
findOne(queryObject, options, callback):
构造QueryCommand然后调用db的executeCommand
createIndex(fieldOrSpec, options, callback):
调用ensureIndex
ensureIndex(fieldOrSpec, options, callback):
调用db的ensureIndex方法
dropIndex(indexName, callback):
调用db的dropIndex方法
dropIndexes(callback):
调用db的dropIndex方法,第二个参数是*
mapReduce(map, reduce, options, callback):
group(keys, condition, initial, reduce, command, callback)
后面再单独介绍
- 调用他们的测试代码地址,可以根据你要使用的collection接口在里面查找:https://github.com/christkv/node-mongodb-native/blob/master/integration/integration_tests.js