Mongodb基本使用
2016-12-25 本文已影响0人
Captain_Gu
启动服务:./bin/mongodb-3.2.10/bin/mongod -f conf/mongod.conf
连接服务:./bin/mongodb-3.2.10/bin/mongo 127.0.0.1:27017
创建数据库和集合: db.collectionName.insert({x:gu}) 自动创建数据库和集合
insert:插入数据
js脚本执行插入:
for(i=3;i<100;i++)db.gu_collection.insert({x:i})
select:查询数据
普通查询: db.collectionName.find({x:67})
查询跳过(skip)多少个,显示(limit)几条,用什么排: db.gu_collection.find().skip(50).limit(3).sort({x:1})
db.gu_collection.findOne() 查找一个数据
update: 更新数据
db.collectionName.update(condition,newdate,boolean)只更新找到的第一条数据
查询y=100数据,将z设置为1000 ,x,y保持原样 db.gu_collection.update({y:100},{$set:{z:1000}})
更新不存在的数据(不存在自动创建,true)db.gu_collection.update({y:200},{x:2000,y:33:z:10},true)
更新多条数据 db.gu_collection.update({c:1},{$set:{c:2}},false,true) 第四个参数设置为true,更新多条数据
delete:条件删除:db.gu_collection.remove({c:2})
删除某个表: db.gu_collection.drop();
index: 索引
查看索引:db.gu_collection.getIndexs()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.gu_collection"
}
]
添加索引(在数据创建之前)
db.gu_collection.ensureIndex({x:1})x=1正向排序,x=-1负向排序
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
//给索引命名
db.gu_collection2.ensureIndex({y:1},{name:"gu_index"})
//删除索引
db.gu_collection2.dropIndex("gu_index")
//唯一索引
db.gu_collection2.ensureIndex({m:1,n:1},{unique:true})
//索引是否稀疏(不必为不存在的m,n值的记录创建索引)
db.gu_collection2.ensureIndex({m:1,n:1},{sparse:true})
//只查找m存在的记录
db.gu_collection2.find({m:{$exists:true}})
//查找m不存在,强制使用m_1索引
db.gu_collection2.find({m:{$exists:true}}).hint("m_1")
单键索引:
多键索引:创建与单键索引相同,区别在字段值
单键索引值是单一的,string,date,number等
多键索引值,arrays(数组)
db.gu_collection2.ensureIndex({x:1,y:1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 2,
"numIndexesAfter" : 3,
"ok" : 1
}
> db.gu_collection2.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.gu_collection2"
},
{
"v" : 1,
"key" : {
"x" : 1
},
"name" : "x_1",
"ns" : "test.gu_collection2"
},
{
"v" : 1,
"key" : {
"x" : 1,
"y" : 1
},
"name" : "x_1_y_1",
"ns" : "test.gu_collection2"
}
]
过期索引:设置索引可用时间,过期则删除索引,删除数据 (设置的字段值必须是ISOdate 或者ISOdate数组,不能是时间戳)
db.gu_collection2.ensureIndex({time:1},{expireAfterSeconds:30}) //30s后删除数据
db.gu_collection2.insert({time:new Date()})
30秒后删除数据
如果是isodate数组按最小时间删除
后台60s跑一次,删除也需要时间,有误差
全文索引:应用中不仅可以搜索标题,还可以搜索内容(每个collection中只允许创建一个全文索引)
创建全文索引:db.gu_collection2.ensureIndex({article:"text"}) key是字段值,value是“text”
插入数据:
db.gu_collection2.insert({article:"aa bb cc dd ee ff"})
WriteResult({ "nInserted" : 1 })
db.gu_collection2.insert({article:"aa bb cc dd gg ff"})
WriteResult({ "nInserted" : 1 })
db.gu_collection2.insert({article:"aa bb cc dd rr ff"})
WriteResult({ "nInserted" : 1 })
db.gu_collection2.insert({article:"aa bb dd rr ff"})
WriteResult({ "nInserted" : 1 })
下面查询:
//查询aa
db.gu_collection2.find({$text:{$search:"aa"}})
{ "_id" : ObjectId("585f50b043a807b6b8941734"), "article" : "aa bb cc dd ee ff" }
{ "_id" : ObjectId("585f50b543a807b6b8941735"), "article" : "aa bb cc dd gg ff" }
{ "_id" : ObjectId("585f50b943a807b6b8941736"), "article" : "aa bb cc dd rr ff" }
{ "_id" : ObjectId("585f50bd43a807b6b8941737"), "article" : "aa bb dd rr ff" }
db.gu_collection2.find({$text:{$search:"rr"}})
{ "_id" : ObjectId("585f50b943a807b6b8941736"), "article" : "aa bb cc dd rr ff" }
{ "_id" : ObjectId("585f50bd43a807b6b8941737"), "article" : "aa bb dd rr ff" }
db.gu_collection2.find({$text:{$search:"cc"}})
{ "_id" : ObjectId("585f50b043a807b6b8941734"), "article" : "aa bb cc dd ee ff" }
{ "_id" : ObjectId("585f50b543a807b6b8941735"), "article" : "aa bb cc dd gg ff" }
{ "_id" : ObjectId("585f50b943a807b6b8941736"), "article" : "aa bb cc dd rr ff" }
//复合查询 gg ff 是或查询
db.gu_collection2.find({$text:{$search:"gg ff"}})
{ "_id" : ObjectId("585f50b043a807b6b8941734"), "article" : "aa bb cc dd ee ff" }
{ "_id" : ObjectId("585f50b543a807b6b8941735"), "article" : "aa bb cc dd gg ff" }
{ "_id" : ObjectId("585f50b943a807b6b8941736"), "article" : "aa bb cc dd rr ff" }
{ "_id" : ObjectId("585f50bd43a807b6b8941737"), "article" : "aa bb dd rr ff" }
//不包含cc
db.gu_collection2.find({$text:{$search:"gg ff -cc"}})
{ "_id" : ObjectId("585f50bd43a807b6b8941737"), "article" : "aa bb dd rr ff" }
//与查询 既包含aa 又包含bb 又包含cc的查询
db.gu_collection2.find({$text:{$search:"\"aa\" \"bb\" \"cc\""}})
{ "_id" : ObjectId("585f50b043a807b6b8941734"), "article" : "aa bb cc dd ee ff" }
{ "_id" : ObjectId("585f50b543a807b6b8941735"), "article" : "aa bb cc dd gg ff" }
{ "_id" : ObjectId("585f50b943a807b6b8941736"), "article" : "aa bb cc dd rr ff" }
文本相似度查询
db.gu_collection2.find({$text:{$search:"aa bb cc"}},{score:{$meta:"textScore"}})
{ "_id" : ObjectId("585f50b043a807b6b8941734"), "article" : "aa bb cc dd ee ff", "score" : 1.75 }
{ "_id" : ObjectId("585f50b543a807b6b8941735"), "article" : "aa bb cc dd gg ff", "score" : 1.75 }
{ "_id" : ObjectId("585f50b943a807b6b8941736"), "article" : "aa bb cc dd rr ff", "score" : 1.75 }
{ "_id" : ObjectId("585f50bd43a807b6b8941737"), "article" : "aa bb dd rr ff", "score" : 1.2 }
{ "_id" : ObjectId("585f53db43a807b6b8941738"), "article" : "aa bb cc", "score" : 2 }
//文本相似度排序
db.gu_collection2.find({$text:{$search:"aa bb cc"}},{score:{$meta:"textScore"}}).sort({score:{$meta:"textScore"}})
{ "_id" : ObjectId("585f53db43a807b6b8941738"), "article" : "aa bb cc", "score" : 2 }
{ "_id" : ObjectId("585f50b043a807b6b8941734"), "article" : "aa bb cc dd ee ff", "score" : 1.75 }
{ "_id" : ObjectId("585f50b543a807b6b8941735"), "article" : "aa bb cc dd gg ff", "score" : 1.75 }
{ "_id" : ObjectId("585f50b943a807b6b8941736"), "article" : "aa bb cc dd rr ff", "score" : 1.75 }
{ "_id" : ObjectId("585f50bd43a807b6b8941737"), "article" : "aa bb dd rr ff", "score" : 1.2 }
查询限制
一次查询只能使用一次$text。
$text不能存在与$nor(不存在)查询中
使用$text后hint(强制指定索引)不在起作用