当前位置:数据库 > mongodb >>

mongodb学习笔记--杂项与补充

mongodb学习笔记--杂项与补充
 
1。适用场景:持久化缓存层,高效的时效性,用于对象和Json数据的存储,高伸缩性的场景,大尺寸,低价值的数据存储。 
不适用:高度事务性的场景,复杂多表查询,传统商业智能应用。
2.保持mongodb开机自启动:echo "/usr/local/mongodb/bin/mongod--dbpath=/usr/local/mongodb/data" >>/etc/rc.local
3.杀掉进程 pkill或者kilall
4.数据类型:null:表示空值或者不存在{“name":null}  布尔类型: {“name":true}  ,32位整数:将被转义位64位浮点数,
64位整数:同上。64位浮点数:默认类型如 {“money":12.02}    字符串类型: {“name":‘各地分公司’}  ,
ObjectId类型:文档唯一的12位id,由时间戳,机器吗  pid  计数器组成。
日期: {“one":new Date()}    正则:{“name":/ho/i} 采用JS的正则语法 
代码:{“name":function(){}}  数组:{“x":["a","b",["c","d"]]} 值可以数组,也可以在数组嵌套数组 
5. db.blog.insert和db.blog.save的区别:当插入一条主键相同的数据,insert会报错,不允许插入,而save则会更新也就是覆盖原来的值。 
6.用JS循环插入数据 举例:
   for(i=1;i<=20;i++){
... db.blog.insert({"name":"user"+i,age:i})
... }
输入it显示更多。 
7.注意count的用法:如集合有10条数据,db.blog. count()输出10。如果前面加条件,例:db.blog.sort({"age":-1}).skip(2).limit(2).count();按理应该结果是2,但实际是10,因为count忽略了前面的条件,count有两个参数,1代表不忽略0代表忽略,默认是0.
注意sort的位置:放在前面和后面结果是不同的,表示先排序后执行条件还是先执行条件后排序。
8.查询name为user1并且age为1的数据: db.blog.find({"name":"user1","age":1})
9.or和nor的用法:
查询  name为user1或者age为1的数据:  db.blog.find({$or:[{"name":"user1"},{"age":10}]})
结果: { "_id" : ObjectId("51c072290adf859a09bec715"), "name" : "user1", "age" : 1 }
> db.blog.find({$or:[{"name":"user1"},{"age":10}]})
{ "_id" : ObjectId("51c072290adf859a09bec715"), "name" : "user1", "age" : 1 }
{ "_id" : ObjectId("51c072290adf859a09bec71e"), "name" : "user10", "age" : 10 }
{ "_id" : ObjectId("51c1b114cf61cd895f843543"), "name" : "user1", "age" : 21 }
查询  name不为user1或者age不为1的数据:  db.blog.find({$nor:[{"name":"user1"},{"age":10}]}) 
  查询  name不为user1或者name不为user2的数据:  db.blog.find({$nor:[{"name":"user1"},{"name":"user2"}]})
10.distinct过滤重复记录如: db.blog.distinct("name")
11.数组内对象查找 比如查找post里面tit为1的数据:   db.ceshi.find({"post.tit":1})
结果: { "_id" : ObjectId("51c1bb601a7338d22dcd6010"), "name" : "user1", "post" : [ { "tit" : 1 }, { "tit" : 2 }, { "tit" : 3 } ] }
另一种方法:$elemMatch,用法如: db.ceshi.find({"post":{$elemMatch:{"tit":1}}})结果如上.
12.游标:
 比如X=db.blog.find()回车将得到数据就集合所有记录
定义变量x:var x=db.blog.find();回车输入x.hasNext()判断是否有下一条记录返回true或者false.如果返回true说明有数据,回车输入x.next()则输出第一条记录,继续回车输入x.next()输出下一条,直到x.haveNext返回false,如果继续x.next()将报错. 
13.Null值查询:比如查询一条age为null的记录,按原先的思路 db.blog.find({"age":null})这样会把不存在age的记录也查出来,显然不对.
那么如何查询呢,有这么几种方法:1,  db.blog.find({"age":{$exists:1,$in:[null]}})查询age存在的然后筛选出值为null的
2.  db.blog.find({"age":{$type:10}})查出age值类型为10的记录
14.有如下有一条数据:  { "_id" : ObjectId("51c1c8121a7338d22dcd6013"), "name" : "user1", "tiezi" : [ { "title" : "124" }, { "title" : "34543" }, { "title" : "345345" } ] }
如何查出name为user1的前两篇帖子呢可以用$slice方法:  db.ceshi.find({"name":"user1"},{tiezi:{$slice:2}})
后两篇:  db.ceshi.find({"name":"user1"},{tiezi:{$slice:-2}})
 
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,