MongoDB学习笔记

来源:互联网 发布:nginx lua 写入txt 编辑:程序博客网 时间:2024/06/16 06:11

下载和安装

http://blog.csdn.net/andie_guo/article/details/26068711
http://www.cnblogs.com/sweetchildomine/p/6397136.html

基本操作

显示所有数据库  show dbs  切换数据库,如果没有则会在需要的时候进行创建  use test  显示当前所在数据库db关闭数据库  db.dropDatabase()  插入一条数据db.test_collection.insert({x:1})  插入数据,通知指定_id字段  db.test_collection.insert({x:2,_id:1})  插入97条数据  for(i=3;i<100;i++)db.test_collection.insert({x:i})  查看数据总数  db.test_collection.count()  查询时跳过前三条数据,限制返回数据为2条,同时对x字段进行排序  db.test_collection.find().skip(3).limit(2).sort({x:1})   查看表  show collections  show tables  用find进行查看,函数参数可以为空,返回所有数据  db.test_collection.find()   查找x为1的数据  db.test_collection.find({x:1})  将x为1的数据变为x为999  db.test_collection.update({x:1},{x:999})  有多个字段时进行修改  db.test_collection.insert({x:100,y:100,z:100})  把这个数据整个变成y:999  db.test_collection.update({z:100},{y:999})  只修改y字段的值为999  db.test_collection.update({z:100},{$set:{y:999}})  在更新一条不存在的数据时自动创建  db.test_collection.update({y:50},{y:60},true)  update只会更新第一条找到的数据,同时更新时可写成如下形式  将多条c为1的数据设置为c为2  db.test_collection.update({c:1},{$set:{c:2}},false,true)   数据的删除与查询类似接受一个参数,删除操作不允许不传参数   db.test_collection.remove({c:2})  删除表  db.test_collection.drop()  查看集合的索引  db.table.getIndexes() 对x创建索引,x为1代表正向排序,x为-1代表逆向排序  db.table.ensureIndex({x:1})  

常见的查询索引

_id索引

_id索引是绝大多数集合默认建立的索引
对于每个插入的数据,MongoDB都会自动生成一条唯一的_id字段

单建索引

单键索引是最普通的索引
与_id索引不同,单键索引不会自动创建
如记录为{x:1,y:2,z:3}在x字段上创建索引

多键索引

多键索引与单键索引创建形式相同,区别在于字段的值
单键索引:值为一个单一的值,例如字符串,数字或者日期
多键索引:值具有多个记录,例如数组
db.table.insert({x:[1,2,3,4,5]})
MongoDB为x创建了一个多键索引

复合索引

当我们查询的条件不只有一个时,就需要建立复合索引
1. 插入{x:1,y:2,z:3}记录
db.table.insert({x:1,y:1,z:1})
2. 想按照x与y的值查询
3. 创建索引
db.table.ensureIndex({x:1,y:1})
4. 使用{x:1,y:1}作为条件进行查询
db.table.find({x:1,y:1})

过期索引

  1. 过期索引:是在一段时间后会过期的索引
  2. 在索引过期后,相应的数据会被删除
  3. 这适合存储在一段时间之后会失效的数据比如用户的登录信息,存储的日志

在time字段上建立过期索引,在10秒后删除
db.table.ensureIndex({time:1},{expireAfterSeconds:10})
在time字段上插入当前时间
db.table.insert({time:new Date()})

过期索引的限制

  1. 存储在过期索引字段的值必须是指定的时间类型
    说明:必须是ISODate或者ISODate数组,不能使用时间戳,否则不能被自动删除
  2. 如何指定了ISODate数组,则按照最小的时间进行删除
  3. 过期索引不能是复合索引
  4. 删除时间不是精确
    说明:删除过程是由后台程序每60s跑一次,而且删除也需要一些时间,所以存在误差

全文索引

建立方法

值固定,为text  db.table.ensureIndex({key:"text"})  db.table.ensureIndex({key_1:"text",key_2:"text"})  为所有字段建立全文索引  db.table.ensureIndex({"$**":text"})  

使用全文索引查询

db.table.find({$text:{$search:"coffee"}})  查询包含aa或者bb或者cc的内容  db.table.find({$text:{$search:"aa bb cc"}})  查询包含aa或者bb,但不包含cc的字符串  db.table.find({$text:{$search:"aa bb -cc"}})  查询包含aa和bb和cc的内容,包内容用"括起来即可\为转义字符  db.table.find({$text:{$search:"\"aa\" \"bb\" \"cc\""}})      

db.table.ensureIndex({“article”:”text”})
db.table.insert({“article”:”aa bb”})
db.table.insert({“article”:”aa bb cc dd”})
db.table.insert({“article”:”aa bb rr gg”})
db.table.insert({“article”:”aa bb rr gg dfdfadfda”})
db.table.find({$text:{$search:”aa”}})
全文索引相似度
$meta操作符:{score:{$meta:”textScore”}}
写在查询条件后面可以返回返回结果的相似度,与sort一起使用,可以达到很好的实用效果
db.table.find({$text:{$search:”aa bb”}},{score:{$meta:”textScore”}})
对相似度进行排序
db.table.find({$text:{$search:”aa bb”}},{score:{$meta:”textScore”}}).sort({score:{$meta:”textScore”}})

全文索引使用限制

每次查询,只能指定一个$text查询
$text查询不能出现在$nor查询中
查询中如果包含了$text,hint不再起作用
MongoDB全文索引还不支持中文

地理位置索引

原创粉丝点击