这里只以shell里的命令来演示,转换为代码其实就只是以BSON的文档来实现而已.
以local数据库为例,创建多个集合,以具体的实例来演示效果。
use local;
(一) insert命令
mongodb的shell可以用js的语法,定义一个对象post,
post = {"title":"post1",
"content":"hello mongo",
"time":new Date()}
查看post :post
db.blog.insert(post);// 将post对象写进blog集合,如果一开始这个集合不存在,会自动创建。
db.blog.find();//这里就会看到刚写入的对象; 或者使用db.blog.findOne() /*大小写敏感*/ 查看符合条件的第一条
以上的步骤也可以合并为一句
db.blog.insert(
{"title":"post1",
"content":"hello mongo",
"time":new Date()}
)
mongodb不提供事务操作,
(二)find
db.blog.find()//查找所有 默认显示20条 根据提示输入it可以查看更多。
条件查询db.blog.find({"title":"post1","content":"hello mongo"})
日期比较db.blog.find({"time":{"$gte":new Date("2014-11-18")}}) 注意日期的命名方式和关键字new
常用的有$gt $gte $lt $lte $in $ne等比较符 ,还提供正则表达式 /hello/
(三) update
首要注意的地方:db.blog.update({"title":"post1"},{"content":"hello world"})这句并不是将blog集合里的这条记录的内容改成hello world,而是把整条文档(文档对应的关系数据库中的一行记录,这里叫文档改为"content":"hello world",不妨执行一下用find查看结果。
要达到上述效果 正确的做法是:db.blog.update({"title":"post1"},{$set:{"content":"hello world"}})
由于mongodb并没有固定结构,所以当set后跟的字段不存在的时候会自动创建!
举例来说db.blog.update({"title":"post1"},{$set:{"comments":["nice","cool"]}})
再查看就会发现多了一个comment字段了,该字段类型为数组,并且数组中也可以有多种类型。
除了$set还有个常用的修改符$inc (increase)
这里换个集合和案例来演示:
db.games.insert({"user":"ben","score":0})
db.games.insert({"user":"lily","score":0})
这时我们有了2个用户和得分记录:
db.games.update({"user":"ben"},{$inc:{"score":10}})
db.games.update({"user":"lily"},{$inc:{"score":20}})
find查看一下 看到得分都变了,如果是要减小 直接改为负数就可以了,同样的这里如果字段不存在的时候也会新建的。
在这里mongodb还有一个与传统关系型数据库不一致的地方,演示如下
db.games.insert({"user":"lily","score":0})//再插入一条user为lily的记录,由于主键是objectid所以并不冲突
db.games.update({"user":"lily"},{$inc:{"score":50}})//执行更新
查看结果,发现只有第一条lily的得分改变了,
如果是要全部更新的话: db.games.update({"user":"lily"},{$inc:{"score":100}},{multi:true})
(四)remove
db.games.remove({})//删除全部,
条件删除中的条件与update的条件写法一致,不再赘述,
需要注意的是,如果是删除集合全部内容,可以用db.games.drop()来删除整个集合包括建立的所有索引,速度更快