mongoDB的基本操作
强烈推荐参考官方用户手册:
http://www.mongodb.org/display/DOCS
1)插入(insert)
插入的value是json对象,以下示例循环添加了10个用户信息,字段可以是字符串、数值、对象、数组等。
通过VUE查看:
2)查询(find)
2.1——查询全部内容:
db.user.find({})
我们可以称{}中的内容为选择器,这里选择器为空,可以省略,指获取collection中所有内容。
2.2——字段查询
db.user.find({name:'fox1'})
2.3——排序(sorting)
db.user.find({}).sort({age:1})
1代表升序,-1代表降序
2.4——skip and limit(可以用于分页)
db.user.find({ }).skip(5).limit(5).sort({ "age" : 1 });
例如,对user表进行分页,写一个js函数提供分页功能。
function pagination(pageNumber , nPerPage){
db.user.find().skip((pageNumber-1)*nPerPage).limit(nPerPage).forEach(
function(user){print(user.name+"<p>")});}
2.5——游标
var cur=db.user.find();
cur.forEach(function(x){ print(tojson(x))});
具体参考:
http://www.mongodb.org/display/DOCS/Querying
高级查询
参考:http://www.mongodb.org/display/DOCS/Advanced+Queries
2.6——条件运算符
#<,<=,>,>=
#查找18<age<28的用户
db.user.find({age:{$gt:18,$lt:28}})
#$all,全包含
#查找邮箱在'fox@126.com','hg0@fox.com'范围内的用户
db.user.find({email:{$all:['fox@126.com','hg0@fox.com']}})
#$exists,表示字段是否存在
#查找存在字段a的用户
db.user.find({a:{$exists:true}})
#$mod,取模
#找到本命年的用户
db.user.find({age:{$mod:[12,0]}})
等价于:
db.user.find("this.age % 12 == 0")
#$ne,不等于
#获取age不等于10的用户
db.user.find({age:{$ne:10}})
#$in,$nin
db.user.find({age:{$in:[10,12,14]}})
db.user.find({age:{$nin:[10,12,14]}})
#$nor,$or,$and 关系运算符
#查找age<15或者age>25的用户,并按照age排序
db.user.find({$or:[{age:{$lt:15}},{age:{$gt:25}}]}).sort({age:1})
#$size
#查找有两个邮箱地址的用户
db.user.find({email:{$size:2}})
#$type
#根据字段类型进行查找
字段类型对应关系
Type Name | Type Number |
---|---|
Double | 1 |
String | 2 |
Object | 3 |
Array | 4 |
Binary data | 5 |
Object id | 7 |
Boolean | 8 |
Date | 9 |
Null | 10 |
Regular expression | 11 |
JavaScript code | 13 |
Symbol | 14 |
JavaScript code with scope | 15 |
32-bit integer | 16 |
Timestamp | 17 |
64-bit integer | 18 |
Min key | 255 |
Max key | 127 |
2.7——正则查询
2.8——数据中数据的查询
#可以直接对数组中的某一个元素进行检索
#查询邮箱包含hg6@fox.com的用户
db.user.find({email:'hg6@fox.com'})
#elemMatch
#数组元素中应用数学表达式(match expression)
2.9——embedded Object(内置对象属性查询)
#查询在长沙的用户
db.user.find({'address.city':'changsha'})
注意:此时的address.city需要引号(整体化)
2.10——非
#$not
#查找大于等于15岁的用户
db.user.find({age:{$not:{$lt:15}}})
注意:
db.user.find({$not:{age:{$gt:15}}})不正确!!!
2.11——js表达式
#查找age大于25的用户
a) db.user.find({age:{$gt:25}})
b) db.user.find({$where:"this.age > 25"})
c) db.user.find("this.age > 25")
d) f = function(){return this.age>25;}
db.user.find(f)
写复杂条件,这个$where比较方便强大了!
3)更新(update)
3.1——更新语法:db.collection.update( criteria, objNew, upsert, multi )
criteria:数据范围,需要修改数据的查询条件
objNew:更新数据
upsert:如果没有查询到则新增,但只新增一条数据
multi :默认只更新第一条数据
3.2——#$inc
#必须是数值型字段
#给fox1加一岁
db.user.update({name:'fox1'},{$inc:{age:1}})
3.3——#$set
#给fox1变成10岁
db.user.update({name:'fox1'},{$set:{age:10}})
3.4——#$unset
#删除某个字段
3.5——#针对数组的操作:$push,$pushAll,$addToset,$each,$pop,$pull,$pullAll
#给fox1新增一个邮箱($push)
db.user.update({name:'fox1'},{$push:{email:'fire009@126.com'}})
#$pop:{field:1}删除最后一个元素,$pop:{field:-1}删除第一个元素。
#$pull删除数组中指定条件的数据。
#使用$进行位置上的操作(指定数组上某个元素)