MongoDB 简单操作
一、库相关
1、创建库
use dataBaseName
直接使用use关键字,后面跟库名。如果创建库后不插入数据,退出库会自动删除该库。
2、删除库 在需要的库当前执行下面命令即可删除。
db.dropDatabase()
二、集合相关
1、创建集合
第一种方式:
db.createCollection(name, options)
- name: 要创建的集合名称
- options: 可选参数, 指定有关内存大小及索引的选项

第二种方式,直接使用集合插入语句。后面会介绍插入。
db.list01.insert({"name":"王浩"});
2、删除集合
collection 集合的名称
db.collection.drop()
3、显示集合
show collections;
4、插入集合
所有执行的语句如下:加了注释
// 使用库 use test; // 创建集合 db.createCollection("list"); // 显示所有集合 show collections; // 插入一条 db.list.insert({"name":"王浩"}) // 查询 db.list.find(); // 插入多条 db.list.insert([{"name":"王浩4"},{"name":"王浩5","sex":"男"},{"name":"王浩3","sex":1}]); //查询全部 db.list.find(); // 还有两种特殊的插入方法insertOne insertMany // 插入一个,并返回插入后的id var inserOneRes = db.list.insertOne({"name":"王浩4"}); inserOneRes; // 插入多个,并返依次回插入后的id var inserManyRes = db.list.insertMany([{"name":"王浩4"},{"name":"王浩3","sex":1}]); inserManyRes;
下面是图片示例:

注:save方法也可以插入,具有insert一样的功能。还包括修改已有的数据。修改下面介绍
db.list.save([{"name":"王浩"},{"name":"王浩"}]);
5、修改集合内的数据

用到的代码如下:
// 修改集合内的数据 db.list.find(); // 更新list集合里面name为王浩的第一条匹配数据 db.list.update({"name":"王浩"},{$set:{"sex":0}}); // upsert :可选 如果数据存在则更新,如果数据不存在则插入 // multi :可选 true则更新里面所有匹配的数据,flse则更新匹配到的第一条。默认false // 更新list集合里面name为王浩的所有匹配数据 db.list.update({"name":"王浩"},{$set:{"sex":null}},{multi:true}); // 数据库没有则插入 db.list.update({"name":"王浩10086"},{$set:{"sex":null}},{upsert:false},{multi:true});
下面是图片示例:

在3.2版本以后,MongoDB提供以下更新集合文档的方法:
- db.collection.updateOne() 向指定集合更新单个文档
- db.collection.updateMany() 向指定集合更新多个文档
用法如下;
db.list.updateOne({"name":"王浩"}, {$set:{"sex":111}}); db.list.updateMany({"name":"王浩"}, {$set:{"sex":111}});
6、删除集合中的内容

用到的代码如下:
// 删除集合中的内容 db.list.find(); // 删除所有name为王浩的数据 db.list.remove({"name":"王浩"}); // 插入数据 db.list.insert({"name":"王浩"}); db.list.insert({"name":"王浩"}); db.list.insert({"name":"王浩"}); // 删除一条name为王浩的数据 db.list.remove({"name":"王浩"},{justOne:true}); // 清空list数据 db.list.remove({});
下面是图片示例:

注:
remove不会释放空间需要执行下面语句释放空间
// 释放空间 db.repairDatabase(); 或 db.runCommand({ repairDatabase: 1 });
据说remove过时了,可以使用下面的语句删除:
// 删除一条数据 db.list.deleteOne({"name":"王浩"}); // 删除多条匹配的数据 db.list.deleteMany({"name":"王浩"}); // 清空list数据 db.list.deleteMany({});
7、查询list中的元素

使用到的代码如下:
//查询list中所有的数据 db.list.find(); // 查询符合条件的数据 name=王浩 db.list.find({"name":"王浩"}); // 条件or的使用 or使用$or 操作符 db.list.find({$or:[{"name":"王浩"},{"name":"王浩4"}]}); // 条件and的使用 多个条件后面追加即可 db.list.find({"name":"王浩","sex":"1"}); // 条件or和and结合使用 // 语句说明: // java: name=王浩 && (age=10 || sex = 0 ) // sql : name = 王浩 and (age=10 or sex=0 ) db.list.find({"name":"王浩", $or:[{"age":12},{"sex":0}]}); // 比较符 查询 db.list.find({"name":"王浩", $or:[{"age":{$gt:10}},{"sex":0}]}); // 查询age 11-20之间的数据 db.list.find({"name":"王浩", $or:[{"age":{$gt:11,$lt:20}},{"sex":0}]}); // projection 参数的使用,返回指定列,或者不返回指定列 // 1或者true 显示,0或false不显示。格式如下{columnA : 0/1,columnB : true/false} // _id默认显示,显示name,_id不显示 db.list.find({"name":"王浩"},{"name":1,"_id":false}); // _id默认显示,id和name不显示,其它显示 db.list.find({"name":"王浩"},{"name":0,"_id":false}); // 查询list中所有的name db.list.find({},{"name":1,"_id":false});
下面是图片示例:

8、模糊查询:

代码如下;
// 查询name中包含王的数据 db.list.find({"name":{$regex:"王"}}); db.list.find({"name":{$regex:/王/}}); db.list.find({"name":/王/}); db.list.find({"name":{$in:[/王/]}}); // 查询name以王开头的数据 db.list.find({"name":{$regex:/^王/}}); // 查询name以浩结尾的数据 db.list.find({"name":{$regex:/浩$/}});
执行图片展示如下:

扩充知识:
and查询的模板如下:
db.col.find({key1:value1, key2:value2})
or查询的模板如下:
db.col.find( { $or: [ {key1: value1}, {key2:value2} ] } )
projection 使用格式如下:
// 其中projection中,入参格式为{columnA : 0/1,columnB : 0/1} db.collection.find(query, projection)

$gt -------- greater than > $gte --------- gt equal >= $lt -------- less than < $lte --------- lt equal <= $ne ----------- not equal != $eq -------- equal =
$type 根据类型筛选数据:
//查询数据库sex类型为string的数据 db.list.find({"sex":{$type:2}}); db.list.find({"sex":{$type:"string"}});
| Type | Number | Alias | Notes |
| Double | 1 | "double" | |
| String | 2 | "string" | |
| Object | 3 | "object" | |
| Array | 4 | "array" | |
| Binary data | 5 | "binData" | |
| Undefined | 6 | "undefined" | Deprecated |
| ObjectId | 7 | "objectId" | |
| Boolean | 8 | "bool" | |
| Date | 9 | "date" | |
| Null | 10 | "null" | |
| Regular Expression | 11 | "regex" | |
| DBPointer | 12 | "dbPointer" | Deprecated |
| JavaScript | 13 | "javascript" | |
| Symbol | 14 | "symbol" | Deprecated |
| JavaScript (with scope) | 15 | "javascriptWithScope" | |
| 32-bit integer | 16 | "int" | |
| Timestamp | 17 | "timestamp" | |
| 64-bit integer | 18 | "long" | |
| Decimal128 | 19 | "decimal" | New in version 3.4. |
| Min key | -1 | "minKey" | |
| Max key | 127 | "maxKey" |
9、MongoDB Limit与Skip方法——分页查询
语法如下;limit 查询的数量,skip跳过的条数
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
db.COLLECTION_NAME.find().skip(10).limit(100) 相当于MySql的limit(10,1000)
注:由于skip是一条一条数过来的,所以当数据量过多的时候则效率会大大降低。所以可以加上条件,获取上一次index,然后根据index再查多少条
代码如下:
// db.COLLECTION_NAME.find().sort({KEY:1}) 1升序,-1降序 db.list.find().sort({"_id":1}); db.list.find().sort({"_id":-1}); // 跳过第一条,获取两条数据 db.list.find().skip(1).limit(2); // 根据id排序,跳过第一条,获取两条数据 db.list.find().sort({"_id":1}).skip(1).limit(2); // 实现分页:一页5条数据 db.list.find().sort({"_id":1}).limit(5); // 第一页 db.list.find().sort({"_id":1}).skip(5).limit(5); // 第二页 db.list.find().sort({"_id":1}).skip(5+5).limit(5); // 第三页 // 此处省略...... // 新的分页方法 var res = db.list.find().sort({"_id":1}).limit(5); // 第一页 res res[4]._id var res = db.list.find({"_id":{$gt:res[4]._id}}).sort({"_id":1}).limit(5); // 第二页 res var res = db.list.find({"_id":{$gt:res[4]._id}}).sort({"_id":1}).limit(5); // 第三页 res
运行后图片如下;

10、排序

// db.COLLECTION_NAME.find().sort({KEY:1}) 1升序,-1降序 db.list.find().sort({"_id":1}); db.list.find().sort({"_id":-1});
上面已经运行过,此处不再运行。
未完待续ing
此次使用的所有语句
// 使用库 use test; // 创建集合 db.createCollection("list"); // 显示所有集合 show collections; // 插入一条 db.list.insert({"name":"王浩"}) // 查询 db.list.find(); // 插入多条 db.list.insert([{"name":"王浩7"}, {"name":"王浩6","sex":"男"}, {"name":"王浩","sex":1,age:12}]); //查询全部 db.list.find(); // 还有两种特殊的插入方法insertOne insertMany // 插入一个,并返回插入后的id var inserOneRes = db.list.insertOne({"name":"王浩4"}); inserOneRes; // 插入多个,并返依次回插入后的id var inserManyRes = db.list.insertMany([{"name":"王浩4"}, {"name":"王浩3","sex":1}]); inserManyRes; // 修改集合内的数据 db.list.find(); // 更新list集合里面name为王浩的第一条匹配数据 db.list.update({"name":"王浩"}, {$set:{"sex":0}}); // upsert :可选 如果数据存在则更新,如果数据不存在则插入 // multi :可选 true则更新里面所有匹配的数据,flse则更新匹配到的第一条。默认false // 更新list集合里面name为王浩的所有匹配数据 db.list.update({"name":"王浩"}, {$set:{"sex":1}},{multi:true}); // 数据库没有则插入 db.list.update({"name":"王浩10086"}, {$set:{"sex":null}}, {upsert:true},{multi:true}); db.list.updateOne({"name":"王浩"}, {$set:{"sex":111}}); db.list.updateMany({"name":"王浩"}, {$set:{"sex":111}}); db.list.find(); // 删除集合中的内容 db.list.find().pretty(); // 删除所有name为王浩的数据 //justOne : (可选)如果设为 true 或 1,则只删除一个文档, //默认值 false,则删除所有匹配条件的文档。 db.list.remove({"name":"王浩"}); // 插入数据 db.list.insert({"name":"王浩"}); db.list.insert({"name":"王浩"}); db.list.insert({"name":"王浩"}); // 删除一条name为王浩的数据 db.list.remove({"name":"王浩"},{justOne:true}); // 清空list数据 db.list.remove({}); db.list.find(); // 释放空间 db.repairDatabase(); 或 db.runCommand({ repairDatabase: 1 }); // 删除一条数据 db.list.deleteOne({"name":"王浩"}); // 删除多条匹配的数据 db.list.deleteMany({"name":"王浩"}); // 清空list数据 db.list.deleteMany({}); //查询list中的数据 //查询list中所有的数据 db.list.find(); // 查询符合条件的数据 name=王浩 db.list.find({"name":"王浩"}); // 条件or的使用 or使用$or 操作符 db.list.find({$or:[{"name":"王浩"}, {"name":"王浩5"}]}); // 条件and的使用 多个条件后面追加即可 db.list.find({"name":"王浩","sex":1}); // 条件or和and结合使用 // 语句说明: // java: name=王浩 && (age=10 || sex = 0 ) // sql : name = 王浩 and (age=10 or sex=0 ) db.list.find({"name":"王浩", $or:[{"age":12},{"sex":1}]}); // 比较符 查询 查询age大于10的 db.list.find({"name":"王浩", $or:[{"age":{$gt:10}},{"sex":0}]}); // 查询age 11-20之间的数据 db.list.find({"name":"王浩", $or:[{"age":{$gt:11,$lt:20}},{"sex":0}]}); // projection 参数的使用,返回指定列,或者不返回指定列 // 1或者true 显示,0或false不显示。 //格式如下{columnA : 0/1,columnB : true/false} // _id默认显示,显示name,_id不显示 db.list.find({"name":"王浩"}, {"name":1,"_id":false}); // _id默认显示,id和name不显示,其它显示 db.list.find({"name":"王浩"}, {"name":0,"_id":false}); // 查询list中所有的name db.list.find({},{"name":1,"_id":false}); db.list.find(); // 查询name中包含王的数据 db.list.find({"name":{$regex:"王"}}); db.list.find({"name":{$regex:/王/}}); db.list.find({"name":/王/}); db.list.find({"name":{$in:[/王/]}}); // 查询name以王开头的数据 db.list.find({"name":{$regex:/^王/}}); // 查询name以浩结尾的数据 db.list.find({"name":{$regex:/浩$/}}); //查询数据库sex类型为string的数据 db.list.find({"sex":{$type:2}}); db.list.find({"sex":{$type:"string"}}); // db.COLLECTION_NAME.find().sort({KEY:1}) 1升序,-1降序 db.list.find().sort({"_id":1}); db.list.find().sort({"_id":-1}); // 跳过第一条,获取两条数据 db.list.find().skip(1).limit(2); // 根据id排序,跳过第一条,获取两条数据 db.list.find().sort({"_id":1}).skip(1).limit(2); // 实现分页:一页5条数据 db.list.find().sort({"_id":1}).limit(5); // 第一页 db.list.find().sort({"_id":1}).skip(5).limit(5); // 第二页 db.list.find().sort({"_id":1}).skip(5+5).limit(5); // 第三页 // 此处省略...... // 新的分页方法 var res = db.list.find().sort({"_id":1}).limit(5); // 第一页 res res[4]._id var res = db.list.find({"_id":{$gt:res[4]._id}}).sort({"_id":1}).limit(5); // 第二页 res var res = db.list.find({"_id":{$gt:res[4]._id}}).sort({"_id":1}).limit(5); // 第三页 res db.list.drop();
参考:
https://www.runoob.com/mongodb/mongodb-tutorial.html
https://docs.mongodb.com/manual/reference/operator/query/type/index.html

浙公网安备 33010602011771号