-
sql与NoSql的不同 sql:实时一致性,支持事务,可多表联查,限制较多,对表的应用不够灵活,(在没有特别多的事务需求情况下)额外的特性比较消耗性能 NoSQL:操作简单,方便扩展,更好的性能查看全部
-
db.col.find() { "_id" : ObjectId("578d001875c8ebaea2c9fcfd"), "val" : "a b" } { "_id" : ObjectId("578d002975c8ebaea2c9fcfe"), "val" : "a b c" } { "_id" : ObjectId("578d003875c8ebaea2c9fcff"), "val" : "a e f" } db.col.find({$text:{$search:"a b"}},{score:{$meta:"textScore"}}) { "_id" : ObjectId("578d001875c8ebaea2c9fcfd"), "val" : "a b", "score" : 1 } { "_id" : ObjectId("578d002975c8ebaea2c9fcfe"), "val" : "a b c", "score" : 0.75 } db.col.find({$text:{$search:"a b"}},{score:{$meta:"textScore"}}).sort({score:{$meta:"textScore"}}) { "_id" : ObjectId("578d001875c8ebaea2c9fcfd"), "val" : "a b", "score" : 1 } { "_id" : ObjectId("578d002975c8ebaea2c9fcfe"), "val" : "a b c", "score" : 0.75 }查看全部
-
db.col.insert({"val":"a b c"}) WriteResult({ "nInserted" : 1 }) db.col.insert({"val":"a d e"}) WriteResult({ "nInserted" : 1 }) db.col.insert({"val":"f g h"}) WriteResult({ "nInserted" : 1 }) db.con.find({$text:{$search:"a"}}) db.col.find({$text:{$search:"a"}}) db.col.find({$text:{$search:"a b"}}) { "_id" : ObjectId("578cfd344af6ce25ce0a41c6"), "val" : "a b c" } db.col.find({$text:{$search:"f -a"}}) { "_id" : ObjectId("578cfd554af6ce25ce0a41c8"), "val" : "f g h" } db.col.find({$text:{$search:"\"a \"c"}}) { "_id" : ObjectId("578cfd344af6ce25ce0a41c6"), "val" : "a b c" }查看全部
-
只更新第一条记录: db.col.update({c:1},{$set:{c:2}}) 全部更新: db.col.update({c:1},{$set:{c:2}},false,true) 只添加第一条: db.col.update({c:1},{$set:{c:2}},true,false) 全部添加加进去: db.col.update({c:1},{$set:{c:2}},true,true) 全部更新: db.col.update({c:1},{$inc:{c:2}},false,true) 只更新第一条记录: db.col.update({c:1},{$inc:{c:2}},false,false)查看全部
-
MongoDB参考网站查看全部
-
全局索引的限制: 1. 每次查询,只能指定一个$text查询 2. $text查询不能出现在$nor查询中 3. 查询中如果包含了$text, hint不再起作用 4. MongoDB全文索引还不支持中文查看全部
-
索引种类: 1、_id索引:大多数集合默认建立的索引, 2.单键索引:最普通的索引,一条记录,形式为:{x:1,y:2,z:3};单键索引不会自动创建 3.多键索引:多建索引与单键索引创建形式相同,区别在于字段的值; 4.复合索引:当我们的查询条件多个时,就需要建立复合索引 5.过期索引:是在一段时间后会过期的索引;在索引过期后,相应的数据会被删除;适合存储用户登录信息等 ①创建方法:db.collection.ensureIndex({time:1},{expireAfterSeconds:10})10为10秒 ②存储在过期索引字段的值必须是指定的时间类型; 必须是ISODate或者ISODate数组,不能使用时间戳,否则不能被自动删除 ③如果指定了ISODate数组,则按照快到期的时间进行删除 ④过期索引不能是复合索引 ⑤删除时间是不精确的 删除过程是由后台程序每60s跑一次,而且删除也需要一些时间,所以存在误差 如果设置时间很小,则会在60秒内才可以删除,而不是在规定时间内删除 6.全文索引 7.地理位置索引查看全部
-
我是这么理解索引的 默认添加索引不会在字段里显式 也就是和_id的不同之处 但是这个索引是后台奇效的 但在少量数据时很难看出效果(比如我用.sort({'':1})依然可以降序升序排序查看) 但是在大量数据时 可以测试查看建立索引和未建立的差别: 以添加一万条数据 通过删除刚建立的一万条来测试[隐式]索引(我自己瞎叫的)的作用 首先是未建立索引的 for(var i=0;i<10000;i++)db.imooc_collection.insert({b:i}) [建好后立即删除这一万条数据] for(var i=0;i<10000;i++)db.imooc_collection.remove({b:i}) [计算用时:37s(渣渣机器请无视)] 再来是添加数据后再建立索引的 for(var i=0;i<10000;i++)db.imooc_collection.insert({b:i}) [建好后立即建立索引] db.imooc_collection.ensureIndex({b:1}) [开始删除] for(var i=0;i<10000;i++)db.imooc_collection.remove({b:i}) [计算用时:8s(屌丝逆袭啦 OK)]查看全部
-
单键索引: 1.单键索引是最普通的索引 2.与_id索引不同,单键索引不会自动创建 如:一条记录,形式为:{x:1,y:2,z:3} db.imooc_2.getIndexes()//查看索引 db.imooc_2.ensureIndex({x:1})//创建索引,索引可以重复创建,若创建已经存在的索引,则会直接返回成功。 db.imooc_2.find()//查看数据查看全部
-
_id索引:绝大多数集合默认建立的索引,对于每个插入的数据,MongoDB都会生成一条唯一的_id字段。 例如新创建一个集合时 >db.imooc_2.insert({x:1}) >db.imooc_2.getIndexes() #查看集合索引,可看到_id索引 > use imooc switched to db imooc > show tables imooc_collection > db.imooc_2.insert({x:1}) WriteResult({ "nInserted" : 1 }) > db.imooc_2.getIndexes() [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "imooc.imooc_2" } ] > db.imooc_2.findOne() -----db.imooc_2.findOne()——查询一条数据,imooc_2是表名 { "_id" : ObjectId("578b030e8034ea8e6ec4f5be"), "x" : 1 }查看全部
-
索引:是查询的效率更快,他为什么能有此神力,因为,索引是一种经过一定的排序算法,排列好的, 所以查询的效率会高很多,那么是谁主导着索引的排序算法呢?应该是创建对应数据库软件的开发组员吧! 1:查看索引 db.imooc_collection.getIndexes() 2:创建索引 db.imooc_collection.ensureIndex({x:1}) ——创建x字段索引,注意这里的1,不代表值,代表创建索引的方向(排序用的)1代表正向排序,-1反之 3:如果数据量非常大,创建索引需要消耗一定的时间,创建索引的时候需要注意时机,如果已经有大量数据了,这个时候创建索引会严重影响数据库的性能, 应该在创建数据表的时候就创建索引,索引是在插入数据之后创建的,所以,对插入数据有稍微的影响, 不过对于提高的查询效率而言是值得的查看全部
-
1:删除操作,为了防止误操作,删除操作必须传递参数,如果不传会报错,另外,注意的是删除操作默认删除所有查找到的数据和更新的默认操作不同 db.imooc_collection.remove({c:2}) 2:删除整张表可以使用 db.imooc_collection.drop()——db.tableName.drop()查看全部
-
更新多条数据(默认只更新找到的第一条数据) (将update第四个参数设为true即可) > db.imooc_collection.update({c:1},{$set:{c:2}},false,true) update(查询条件,要更新的数据,是否更新不存在的数据,是否更新多条数据)查看全部
-
数据更新update 1.常规更新 >db.imooc_collection.update({x:1},{x:999}) #将x为1的数据更新为x=999 2.只更新某条数据,其余不变 >db.imooc_collection.insert({x:100,y:100,z:100}) 2.更新不存在的数据,更新时自动创建 >db.imooc_collection.update({y:100},{y:999},true) > db.imooc_collection.find({y:100}) --不存在y为100的数据 > db.imooc_collection.update({y:100},{y:999}) --更新不存在的y数据 WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 }) > db.imooc_collection.find({y:999}) --查询发现没有数据 将第三个参数设置为true即可 > db.imooc_collection.update({y:100},{y:999},true) WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : ObjectId("578ae9854512348e10b50368") }) > db.imooc_collection.find({y:999}) --更新不存在的数据成功 { "_id" : ObjectId("578ae9854512348e10b50368"), "y" : 999 } >查看全部
-
数据更新update 1.db.imooc_collection.update({x:1},{x:999}) #将x为1的数据更新为x=999 update接收两个参数,第一个是过滤条件,这里是x=1的数据,第二个是需要修改的目标值 2.另一种情况,一条数据包含三个字段值,如 >db.imooc_collection.insert({x:100,y:100,z:100}) 如果直接执行>db.imooc_collection.update({z:100},{y:99}) #将z为100的数据中的y更新为99 这样会将x和z覆盖掉,只剩下y:99 为了避免这种情况,需要: >db.imooc_collection.update({z:100},{$set:{y:99}}) #加入set操作符 set操作符为部分更新操作符,使用set后,内容中存在的字段会被更新,而不存在的字段会保持原状查看全部
举报
0/150
提交
取消