在一年前曾经接触使用过mongo,现在重新拾起,做一些总结记录。
mongodb是非关系型数据库里比较热门的一种,具体介绍和优劣对比就先不做记录了,这里主要简单记录用法。初学者可以参考 菜鸟教程-mongodb,我只是整理记录,并不如教程的全面,只是个人用的学习笔记。
mongodb的集合 类似于 关系型数据库的表,集合的列 类似于 表的行。数据是形如JSON串的结构存储在db的集合中的,是mongodb独有的结构bson。

以下命令使用在mongodb的命令行交互中:

show dbs (显示所有db名)

mongodb 修改表值 mongodb修改表结构_删除数据


use dbName (进入某db,如果没有则会新建)

mongodb 修改表值 mongodb修改表结构_删除数据_02


show tables (显示db中所有集合名)

mongodb 修改表值 mongodb修改表结构_mongodb 修改表值_03


db.createCollection(colName) (增加一个集合,参数是集合名)

mongodb 修改表值 mongodb修改表结构_mongodb_04


db.col.insert( { key : value, …} ) (往集合内插入一条数据,db.集合名.insert( data ))

mongodb 修改表值 mongodb修改表结构_mongodb 修改表值_05

db.dropDatabase() (删除数据库,在use 数据库名 之后输入调用)

mongodb 修改表值 mongodb修改表结构_mongodb_06


db.collection.drop() (删除集合,db.集合名.drop() )

db.collection.remove( , { justOne: , writeConcern: } ) (删除数据/文档)

mongodb 修改表值 mongodb修改表结构_删除数据_07

db.collection.update(
 ,
 ,
 {
 upsert: ,
 multi: ,
 writeConcern: 
 }
 )

mongodb 修改表值 mongodb修改表结构_删除数据_08

db.collection.find(query, projection) (query查询条件,projection使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略))

如果没有参数,默认返回集合中所有数据。findOne()只显示一条,如果存在多条数据默认第一条。

perrty() (易读显示)

mongodb 修改表值 mongodb修改表结构_mongodb 修改表值_09

条件使用总结

删/改/查 都涉及到条件,条件参数是可选,无条件默认选择的全部。

操作符

含义

用法

$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} })
剩下的查询可以举一反三的去试试看,我暂时没试到,所以只写到这里,以后有用到的会继续补充。