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();
v 1.0.0

 

 

参考:

https://www.runoob.com/mongodb/mongodb-tutorial.html

https://docs.mongodb.com/manual/reference/operator/query/type/index.html

posted @ 2019-07-20 19:14  苦心明  阅读(148)  评论(0)    收藏  举报