一、mongodb基础语法
1.1 数据库
1、查询数据库:show dbs; 2、创建数据库:use mytest;#如果数据库不存在,则会创建数据库,并没有真正创建数据库, 而是插入了一些数据之后, 才会创建数据库和集合 3、删除数据库:db.dropDatabase();
1.2 表操作
1、创建表
1、显示所有集合(表):show collections; 2、创建集合(表):db.createCollection("table5"); 3、删除所有集合(表):db.dropDatabase(); 4、删除某一张集合(表):db.table5.drop();
2、创建固定集合(表) 【table6】,整个集合空间大小 6142800 B, 文档最大个数为 10000 个。
db.createCollection("table6", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
3、插入数据,如果表不存在则会自动创建表
#插入简单表 db.table1.insertOne( { id:1, name:"测试数据", age:12 }) db.table1.insert( { id:3, name:"测试数据2", age:23 }) #插入复杂表数据 db.table2.insertOne( { id:1, name:"测试数据", age:12, child:[ {id:1,name:"子节点1"}, {id:1,name:"子节点2"}, {id:1,name:"子节点3"}, ], house:["3号楼1","3号楼2"] })
#插入多条
db.table7.insertMany([ { "_id" : 1, "char" : "Brisbane", "class" : "monk", "lvl" : 4 }, { "_id" : 2, "char" : "Eldon", "class" : "alchemist", "lvl" : 3 }, { "_id" : 3, "char" : "Meldane", "class" : "ranger", "lvl" : 3 } ]);
1.3、更新
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )
说明:
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如,,inc...)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。
db.table1.update({id:1}, {$set:{name:"修改数据"}})
1.4、删除
db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> } )
说明:
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
- writeConcern :(可选)抛出异常的级别。
1、根据条件删除:db.table1.remove({id:1},1)
2、清空之前的数据:db.table1.remove({})
3、删除匹配的多份文档中的第一份文档:db.table1.deleteOne({status:"A"})
1.5、简单查询
db.collection.find(query, projection)
语法说明:
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
1、查询数据:db.table1.find({id:1}) 2、查询单条数据:db.table1.findOne({id:1}) 3、以易读的方式来读取数据:db.table1.find().pretty();
操作 | 格式 | 范例 | 类似sql语句 |
---|---|---|---|
等于 | {<key>:<value>} |
db.col.find({"by":"菜鸟教程"}).pretty() | where by = '菜鸟教程' |
小于 | {<key>:{$lt:<value>} } |
db.col.find({"likes":{$lt:50}}).pretty() | where likes < 50 |
小于或等于 | {<key>:{$lte:<value>} } |
db.col.find({"likes":{$lte:50}}).pretty() | where likes <= 50 |
大于 | {<key>:{$gt:<value>} } |
db.col.find({"likes":{$gt:50}}).pretty() | where likes > 50 |
大于或等于 | {<key>:{$gte:<value>} } |
db.col.find({"likes":{$gte:50}}).pretty() | where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} |
db.col.find({"likes":{$ne:50}}).pretty() | where likes != 50 |
1.6、模糊查询&or查询
模糊查询:
1、模糊查询:db.table1.find({id:1,"name":{ $regex:/XXX/ }}) 2、查询以某字段为开头的文档:db.table1.find({"name":{$regex:/^XXX/}}) 3、查询以某字段为结尾的文档:db.table1.find({"name":{$regex:/XXX^/}}) 4、查询忽略大小写:db.table1.find({"name":{$regex:/XXX/i}}) #i 是其的一个选项,代表忽略大小写的意思。
OR查询:
db.table1.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
子查询:
db.table2.find({ $or:[ {"child.name":"子节点1"}, {"child.id":1} ] });