启动mongo命令:
格式:mongod --dbpath ”路径“ --logpath "文件路径名" -logappend(以追加日志方式) --fork(以后台方式开启)
实例: mongod --dbpath data --logpath log/mongod.log-logappend --fork
启动mongo shell
命令mongo 默认使用test数据库
命令:use mydb
作用:转换使用mydb,如果不存在则自动创建
命令:show dbs
作用:显示当前存在的数据库
命令:show collections
作用:显示当前操作数据库中存在的数据集合
命令:db.user.save({name:"wuwuwu",age:20})
db.demo.insert({name:"巫政霖",age:21,sex:"男"})
db.demo.insert({name:"wzl",sex:NumberInt(20)})
作用:在user collection 中插入一条记录,如果名字为user的collection不存在,则自动创建
注意:在mongo shell当中,不指明数字类型,都以64位double类型存储
数据格式:json
数据类型表如下
命令:db.user.find() 或 db.user.find(json)
作用:查找全部记录 / 查找对应的记录
命令:db.user.save({_id: ObjectId("55ab3655017ff6cc1d870342}, name: "leo")
操作结果等于
命令:db.user.update({_id:ObjectId("55ab3655017ff6cc1d870342")},{name:"txmwzl"})
作用:用于更新记录,但是操作结果相当于相当于删除后增加,只保留更新的field
那如何只更新某一个field(域)呢?
命令:db.user.update({_id:ObjectId("55ab3655017ff6cc1d870342} , {$set:{name : "wuzhenglin"}})
作用:只更新一个域的值
命令:db.user.remove({age:2})
作用:删除集合中age为2的记录
命令:db.user.drop()
作用:删除名字为user的集合
命令:db.dropDatabase()
作用:删除当前操作的数据库
命令:db.demo.find({sex:null})
作用:查找sex为空或没有这个字段的文档(一个文档相当于一条记录的概念)
命令:db.demo.find({name:{$type:1}})
作用:查找name字段存放值:为double类型的文档
==============================================================
脚本执行
js脚本如下:
//连接数据库
dbService = connect("localhost:27017");
//选择操作集合
db = dbService.getSiblingDB("demo")
//创建bulk对象用于批量插入
db.demo2.drop();
var bulk = db.demo2.initializeUnorderedBulkOp();
//测试数据
var doc1 = {
name:"巫政霖",
scores:
[
{course:"c++",score:93},
{course:"java",score:96}
]
}
bulk.insert(doc1);
var doc2 = {
name:"谭欣明",
scores:
[
{course:"c++",score:97},
{course:"java",score:92}
]
}
bulk.insert(doc2);
//执行插入批量插入操作
bulk.execute()
print("脚本执行完毕")
==============================================================
查询语法
db.demo.find( {where}, {需要输出的字段:设置成1,只能要么0,要么1,不能0,1混合,除了主键设0,其余设1可以}, limit (int), skip (int))
例如: db.demo.find({ },{ _id:0 , name:1} ,2,3) 正确, db.demo.find({ },{ scores:0 , name:1} ,2,3)错误
还可以单独时用limit(), skip(), sort({name:1} )函数
sort(name:1)按照name升序排序 , 0逆序
例如: db.demo.find({ },{ _id:0 , name:0} ,2,3).sort(name:1)
db.demo.find({$or:[{age:{$lt:20}},{name:{$eq:"巫政霖"}}]})
db.demo.find({$nor:[{age:{$lt:20}},{name:{$eq:"巫政霖"}}]})
db.demo.find({$and:[{age:21},{sex:"男"}]})
db.demo.find({sex:{$nin:["女","男"]}})
db.demo.find({age:{$eq:21}})
内嵌文档和数组查询(难点)
数组查询
匹配整个数组
匹配数组中的某个元素(包含两种情况)
与位置无关
与位置有关
内嵌文档数组查询例子:
数据如下:
> db.demo2.find()
{ "_id" : ObjectId("55ab9ef41fde978a4f55f059"), "name" : "巫政霖", "scores" : [ { "course" : "c++", "score" : 93 }, { "course" : "java", "score" : 96 } ] }
{ "_id" : ObjectId("55ab9ef41fde978a4f55f05a"), "name" : "谭欣明", "scores" : [ { "course" : "c++", "score" : 97 }, { "course" : "java", "score" : 92 } ] }
db.demo2.find({'scores.score':93})
db.demo2.find({"scores.1":{ "course" : "java", "score" : 96 } })
模糊查询
findAndModify() :查询修改函数
例子1:
db.demo2.findAndModify({query:{name:{$regex:/^谭/,$options:'im'}},update:{$set:{name:'巫巫巫'}},fields:{_id:0},new:true})
返回结果:
{
"name" : "巫巫巫",
"scores" : [
{
"course" : "c++",
"score" : 97
},
{
"course" : "java",
"score" : 92
}
]
}
例子2:
db.demo2.findAndModify({query:{name:{$regex:/^巫/,$options:'im'}},update:{name:'巫巫巫'},fields:{_id:0},new:true})
返回结果:
{ "name" : "巫巫巫" }
=====================================================
update操作
例子:
db.demo2.update({name:"谭欣明"},{$inc:{"scores.1.score":1}})
db.demo2.update({name:{$regex:/明/}},{$currentDate:{birthday:true}})