今天主要是讲MongoDB的操作,除了CURD,另外还有一些高级性操作.
因为之前已介绍将Mongodb作为windows服务随机启动,进入mongo.exe所在的目录,键入mongo命令.
MongoDB是文档型存储,数据存储格式都是JSON型的,都使用Javascript进行操作,下面就看如何操作.
一. Insert操作
二. Find操作
为了便于操作,我再加一个条纪录
继续看下面的操作
上面的两张图中的$gt,$gte,$lt,$lte,$ne,分别代表>,>=,<,<=,!=的含义.另外还有"$or", "$in","$nin",分别代表Or,In,NotIn,这几个不说了.但好像没有And.
OK,我再加一笔数据再用一个$where关键字,这个相当于where条件语句,并且里面可以有&&,||,!= 这些操作符.
好,再看一个,这里面有一个/mongo/,相当于like '%mongo%',另外还有/^mongo/,/mongo^/相当于'mongo%'和'%mongo'
三. Update操作
db.collection.update(criteria, objNew, upsert, multi)
参数:
criteria - 查询需要更新的项;
objNew - 更新的对象或者 $ operators (例如 $inc) 这样的操作因子
upsert - 是否是 "upsert"; 也就是说如果记录不存在是否插入新的记录,true:插入,false不插入,默认false
multi - 是否所有满足criteria的在整个文档都更新,true:批量更新,false只更新第一条,默认false
主要介绍两个修改器: $inc 和 $set。
$inc 只能对数字操作有效,相当于update users set age = age + 10 where username ='tang';
$set当于update users set age = 10 where username ='tang';
另外第三个参数和第四个参数上面已有描述,这里就不再多说了.
另外还有以下的操作
$unset
{ $unset : { field : 1} }
删除指定的field.
$push
{ $push : { field : value } }
如果fileld是个数组的话,将value追加到数组中;
如果fileld没有定义,那么就将fileld赋值为数组[value];
如果fileld已经存在但不是数组的话,就会报错!
$pushAll
{ $pushAll : { field : value_array } }
$addToSet
{ $addToSet : { field : value } }
只有当这个value不在这个数组里的时候才会添加valuse到数组中。
主持增加多个值,例如:
{ $addToSet : { a : { $each : [ 3 , 5 , 6 ] } } }
$pop
{ $pop : { field : 1 } }
删除数组中最后一个元素。
同理:
删除数组中第一个元素:
{ $pop : { field : -1 } }
四、一些高级操作
1> count
2> distinct
3> gruop
group 比较复杂,有几个参数需要介绍下
- key: Fields to group by.
- reduce: The reduce function aggregates (reduces) the objects iterated. Typical operations of a reduce function include summing and counting. reduce takes two arguments: the current document being iterated over and the aggregation counter object. In the example above, these arguments are named obj and prev.
- initial: initial value of the aggregation counter object.
- cond: An optional condition that must be true for a row to be considered. This is essentially a find()
- finalize: An optional function to be run on each item in the result set just before the item is returned. Can either modify the item (e.g., add an average field given a count and a total) or return a replacement object (returning a new object with just _id and average fields). See jstests/group3.js for examples.
先看下面的例子
4> mapReduce
不多说了,直接上例子
5>其它一些查询
var single = db.person.find().sort({"name",1}).skip(2).limit(2);
这是不是跟C# Linq语法Skip(pageSize * (pageIndex - 1)).Take(pageSize)很像,其实是一个意思。
另外hasNext().forEach();