对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。
文档(document)、集合(collection)、数据库(database)
Collenction
集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。
集合的概念类似关系型数据库里的表Table
集合的模式自由(table的不自由)
下面两个记录可以存在于同一个集合里面:
{"welcome" : "Beijing"}
{"age" : 25}
当然在实际应用我们存储的还是相同类型文档的集合.
这个特性其实可以在应用里很灵活, 你不需要类似 alter table 语句来修改你的数据结构
db.c1.find()
db.c1.count()
db.c1.save() == db.c1.insert()
# tar = {_id:3, name:"Bill_new", age:55}
# db.c1.save(tar) == db.c1.insert(tar)
db.c1.update()
# get = {_id:3}
# tar = {_id:3, name:"Bill_new", age:55, sex:1}
# db.c1.update(get, {$set:tar})
db.c1.remove()
# get = {_id:3}
# db.c1.remove(get)
>>>>>>>
for(var a=0; a<100000; a++) db.things.save({_id:a, date:(new Date())})
db.things.find()
=====
>999
cond = {_id:{$gt:999}}
db.things.find(cond)
=====
>999 AND <1006
cond = {_id:{$gt:999,$lt:1006}}
db.things.find(cond)
=====
跟SQL语法 in 类似,但不同的是, in 只需满足( )内的某一个值即可, 而$all必须满足[ ]内的所有值
cond = {_id:{$all:[4,40,400,4000,40000]}}
db.things.find(cond)
cond = {_id:{$all:[40000]}}
db.things.find(cond)
=====
insert() 快于 save()
for(var a=100000; a<200000; a++) db.things.insert({_id:a, date:(new Date()), name:'obj_'+a})
db.things.find(cond)
=====
$exists 判断字段是否存在
cond = {name:{$exists:true}}
db.things.find(cond)
=====
mysql望尘莫及的操作出现了
for(var a=100000; a<200000; a++) db.things.save({_id:a, date:(new Date()), type:'weekly_star'})
update() insert() 都是小招
save() 屠龙
=====
cond = {name:{$exists:true}}
db.things.find(cond).count()
cond = {type: {$exists:true}}
db.things.find(cond).count()
=====
$ne 不等于
$nin 不包含
$in 与 sql 标准语法的用途是一样的
cond = {_id:{$ne:1}}
db.things.find(cond)
cond = {_id:{$nin:[1,2,3]}}
db.things.find(cond)
cond = {_id:{$in:[4,40,400,4000,40000]}}
db.things.find(cond)
=====
$size 数组元素个数
正则表达式匹配
=====
skip() limit()
从第 199990 条记录开始,返回 2 条记录
db.things.find().skip(199990).limit(2)
>>>>>>>