在一年前曾经接触使用过mongo,现在重新拾起,做一些总结记录。
mongodb是非关系型数据库里比较热门的一种,具体介绍和优劣对比就先不做记录了,这里主要简单记录用法。初学者可以参考 菜鸟教程-mongodb,我只是整理记录,并不如教程的全面,只是个人用的学习笔记。
mongodb的集合 类似于 关系型数据库的表,集合的列 类似于 表的行。数据是形如JSON串的结构存储在db的集合中的,是mongodb独有的结构bson。
以下命令使用在mongodb的命令行交互中:
增
show dbs (显示所有db名)
use dbName (进入某db,如果没有则会新建)
show tables (显示db中所有集合名)
db.createCollection(colName) (增加一个集合,参数是集合名)
db.col.insert( { key : value, …} ) (往集合内插入一条数据,db.集合名.insert( data ))
删
db.dropDatabase() (删除数据库,在use 数据库名 之后输入调用)
db.collection.drop() (删除集合,db.集合名.drop() )
db.collection.remove( , { justOne: , writeConcern: } ) (删除数据/文档)
改
db.collection.update(
,
,
{
upsert: ,
multi: ,
writeConcern:
}
)
查
db.collection.find(query, projection) (query查询条件,projection使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略))
如果没有参数,默认返回集合中所有数据。findOne()只显示一条,如果存在多条数据默认第一条。
perrty() (易读显示)
条件使用总结
删/改/查 都涉及到条件,条件参数是可选,无条件默认选择的全部。
操作符 | 含义 | 用法 |
$gt | 大于( > ) | db.col.find({key: { $gt : value} }) |
$lt | 小于( < ) | db.col.find({key: { $lt : value} }) |
$gte | 大于等于( >= ) | db.col.find({ key: {$gte : value} }) |
$lte | 小于等于( <= ) | db.col.find({ key: {$lte : value} }) |
$ne | 不等于 | db.col.find({ key: { $ne: value} }) |
$eq | 等于 | db.col.find({ key: value }) 或者 db.col.find({ key: { $eq: value} }) 不仅限于value为数字 |
$type | 匹配类型 |
模糊查询(字符串):
包含value的 db.col.find({ key : /value/ })
value开头的 db.col.find({ key : /^value/ })
value结尾的 db.col.find({ key : /value$/ })
例如:
假如有这么三条数据
{
"name" : "root",
"value" : 2,
"tags" : [
"root",
"admin",
],
"days" : [ 15, 20, 25 ],
"info" : {
"age" : 24,
"account" : "rootmanager",
}
},
{
"name" : "test",
"value" : 3,
"tags" : [
"admin",
],
"days" : [ 15.1, 11, 12 ],
"info" : {
"age" : 23,
"account" : "testAccount",
"desc" : "this is a test",
}
},
{
"name" : "manager",
"value" : 1,
"tags" : [
"root",
],
"days" : [ 25, 20, 21 ],
"info" : {
"age" : 24,
}
}
查询 value < 2 的数据 : db.集合名.find({ “value” : {$lt:2} })
查询 value < 2 且 value > 0 的数据 : db.集合名.find({ “value” : {$lt:2, $gt:0} })
查询 value == 2 或 value == 3 的数据 : db.集合名.find({ $or : [ {“value” : 2}, {“value” : 3} ] })
数组查询:
查询 “tags 包含 ‘root’ ” 的数据 : db.集合名.find({ “tags” : “root” })
查询 “tags 包含指定内容且顺序与参数顺序一致” 的数据 : db.集合名.find({ “tags” : [“root”, “admin”] })
查询 “tags 包含指定内容且忽略其他内容以及顺序” 的数据 : db.集合名.find({ “tags” : { $all: [“root”, “admin”] } })
查询 “tags 大小等于2” 的数据 : db.集合名.find({ “tags” : { $size : 2} })
查询 “days 中第一个元素 大于($gt) 22和小于($lt) 30“ 的数据:db.集合名.find({ “days.1” : {$gt:22, $lt:30} })
查询 “days 里含有大于($gt) 22和小于($lt) 30” 的数据:db.集合名.find({ “days” : {$gt:22, $lt:30} })
查询 “days 至少包含一个大于($gt) 22和小于($lt) 30” 的元素 的数据:db.集合名.find({ “days” : {$elemMatch: {$gt:22, $lt:30}} })
Map查询:
map和array查询有些类似,不过map中的元素可能是混合型的。
查询 info里 age 等于24 的数据:db.集合名.find({ “info.age”: 24}) 或者 db.集合名.find({ “info” : {“age”:24} })
剩下的查询可以举一反三的去试试看,我暂时没试到,所以只写到这里,以后有用到的会继续补充。