MongoDB学习笔记-1

mongod --dbpath D:\MogonDB3.4.10\db //开启数据库,无端口号
mongod --dbpath D:\MogonDB3.4.10\db --port=10086 //开启数据库,有端口号
mongod -f D:\MogonDB3.4.10\mongodb.conf //开启数据库


删除集合:db.集合.drop()


//插入数组用[]
db.infos.insert([
{"url":"www.bf.cn"},
{"url":"www.bf.cn"}
]);




//使用js批量插入数据
for(var x=0;x<100;x++){
db.infos.insert({"url":"bf.cn-"+x});
};


//0表示不显示,1表示显示###.pretty()格式化
db.infos.find({“_id”:"789789"},{"_id":0,"name":1}).pretty();


db.students.drop();
db.students.insert({"name":"张三","sex":"男","age":18,"score":89,"address":"无锡"});
db.students.insert({"name":"李四","sex":"女","age":19,"score":99,"address":"苏州"});
db.students.insert({"name":"王五","sex":"男","age":22,"score":109,"address":"南京"});
db.students.insert({"name":"赵六","sex":"女","age":15,"score":82,"address":"新区"});
db.students.insert({"name":"孙七","sex":"男","age":22,"score":88,"address":"南宁"});
db.students.insert({"name":"王八","sex":"男","age":23,"score":85,"address":"长沙"});


// 关系运算,>($gt),<($lt),>=($gte),<=($lte),!=($ne),==(key:value)
//bson,条件查询,查询年龄大于19的人
db.students.find({"age":{"$gt":19}}).pretty();
db.students.find({"age":{"$gte":19}}).pretty();// >=
db.students.find({"age":{"$ne":19}}).pretty(); //!=


// 逻辑预算,与($and),或($or),非($nor,$not)
//查询年龄>=19且<=22的人
db.students.find({"age":{"$gte":19,"$lte":22}}).pretty();//与运算只需要利用","就可以实现
//查询年龄>=19或者成绩>=80的人
db.students.find({"$or":[
{"age":{"$gt":19}},
{"score":{"$gt":90}}]}).pretty();


// 求模$(mod),语法"{$mod:[数字,余数]}"
db.students.find({"age":{"$mod":[20,2]}}).pretty();


// 范围查询,$in(在范围之中),$nin(不在范围之中)
//名字是张三,李四的信息
db.students.find({"name":{"$in":["张三","李四"]}}).pretty();
//名字不是张三,李四的信息
db.students.find({"name":{"$nin":["张三","李四"]}}).pretty();


//插入新数据
db.students.insert({"name":"大神A","sex":"男","age":18,"score":89,"address":"无锡","course":["语文","数学"]});
db.students.insert({"name":"大神B","sex":"女","age":23,"score":90,"address":"广州","course":["英语","数学","政治"]});
db.students.insert({"name":"大神C","sex":"男","age":20,"score":99,"address":"南京","course":["语文","化学"]});
db.students.insert({"name":"大神D","sex":"女","age":17,"score":98,"address":"北京","course":["语文","生物"]});
db.students.insert({"name":"大神E","sex":"男","age":29,"score":97,"address":"上海","course":["语文","地理"]});
db.students.insert({"name":"大神F","sex":"女","age":22,"score":99,"address":"苏州","course":["语文","物理"]});
db.students.insert({"name":"大神G","sex":"男","age":24,"score":89,"address":"南宁","course":["语文","音乐"]});


//对 数组数据进行 判断,可以使用这几个运算符:$all,$size,$slice,$eleMatch
//例:同时参加语文、数学课程的学生
//俩个数组内容都需要保存,使用"{"$all":[内容1,内容2]}"
db.students.find({"course":{"$all":["语文","数学"]}}).pretty();
//查询数组中第二个内容(index=1,索引下标从0开始)为数学的信息
db.students.find({"course.1":"数学"}).pretty();
//查询只参加俩门课程的学生
db.students.find({"course":{"$size":2}}).pretty();
//查询年龄19岁的所有学生信息,但要求只显示俩门参加课程
db.students.find({"age":{"$gt":18}},{"course":{"$slice":2}}).pretty();
//【1,2】里面的第一个数据表示跳过的数据量,而第二个数据表示返回的数量
db.students.find({"age":{"$gt":18}},{"course":{"$slice":[1,2]}}).pretty();


// 字段判断$exists
//查询具有parents成员的数据
db.students.find({"course":{"$exists":false}}).pretty();
db.students.find({"course":{"$exists":true}}).pretty();


// 条件过滤$where
db.students.find({"$where":"this.age>20"}).pretty();
//等价于
db.students.find("this.age>20").pretty();
db.students.find( function(){
return this.age>20;
}).pretty();
db.students.find({"$where":function(){
return this.age>20;
}}).pretty();
//多条件查询使用$and,$where
db.students.find({"$and":[
{"$where":"this.age>19"},
{"$where":"this.age<22"}]}).pretty();


// 正则运算
//基础语法:{key:正则标记}
//完整语法:{key:{"$regex":正则标记,"$option":选项}}
//--option 设置正则信息查询的标记
//----|- "i" :忽略字母大小写
//----|- "m" :多行查找
//----|- "x" :空白字符串除了被转义的或在字符串中以外的完全被忽略
//----|- "s" :匹配所有的字符(圆点、‘.’),包括换行内容
//查询以“大”开头的姓名
db.students.find({"name":/大/}).pretty();
//查询包含‘a’字符信息,
db.students.find({"name":{"$regex":/a/i}}).pretty();
//查询数组数据,做模糊查询使用
db.students.find({"course":/语?/}).pretty();
db.students.find({"course":/语/}).pretty();


// 数据排序
//使用sort()函数,1表示升序,-1表示降序
db.students.find().sort({"score":-1}).pretty();
//自然排序,按照保存的先后顺序排序,$natural
db.students.find().sort({"$natural":-1}).pretty();


// 分页显示
//skip(n):表示跨过多少行数据
//limit(n):取出的数据行的个数限制
//分页:第一页,skip(0).limit(5)
db.students.find().skip(0).limit(5).sort({"age":-1}).pretty();
//分页:第二页,skip(5).limit(5)
db.students.find().skip(0).limit(5).sort({"age":-1}).pretty();




// 更新函数update(),save()
//语法:db.集合.update(更新条件,新的对象数据(更新操作符号),upsert,multi)
//---upsert:如果要更新的数据不存在,则增加一条新的内容(true为增加,false为不增加)
//---multi:表示是否只更新满足条件的第一行记录,如果设置为false,,只更新第一条,如果为true,全更新
//按自然顺序查询前5条
db.students.find().skip(0).limit(5).sort({"$natural":1}).pretty();
//只更新第一条数据:
db.students.update({"age":19},{"$set":{"score":100}},false,false);
//更新满足条件的所有数据:
db.students.update({"age":19},{"$set":{"score":100}},false,true);
//更新不存在的数据:
db.students.update({"age":19},{"$set":{"name":"你猜"}},true,false);




// 修改器
//1.$inc:主要针对于一个数字字段,增加某个数字字段的数据内容
//----语法:{"$inc":{"成员":"内容"}}
//将所有年龄为19的学生成绩一律减少10分,年龄加1
db.students.update({"age":19},{"$inc":{"score":-10,"age":+1}});
//2.$set:进行内容的重新设置:
//----语法:{"$set":{"成员":"新内容"}}
//将年龄为20的人成绩修改为89
db.students.update({"age":20},{"$set":{"score":89}});
//3.unset:删除某个成员的内容
//----语法:{"unset":{"成员":1}}
//删除“张三”的年龄与成绩信息
db.students.update({"name":"张三"},{"$unset":{"age":1,"score":1}});
//4.$push:相当于将内容追加到指定的成员之中(基本上是数组)
//----语法:{"$push":{成员:value}}
//向“张三”添加课程信息(此时张三信息下没有course),如果没有数组,新建一个,有,在后面追加
db.students.update({"name":"张三",{"$push":{"course":"化学"}}});
//5.$pushAll:与"$push"类似,可以一次追加多个内容到数组里面
//----语法:{"$pushAll":{成员:数组内容}}
//向“王五”信息添加课程内容
db.students.update({"name":"张三",{"$pushAll":{"course":["化学","素描"]}}});
//6.$addToSet:向数组里面增加一个新的内容,只有数组,#此时会判断要增加的内容
//在数组里面是否已经存在,如果存在不做操作,不存在,追加内容
db.students.update({"name":"王五"},{"$addToSet":{"course":"武术"}});
//7.$pop:删除数组内的内容
//----语法:{"$pop":{成员:内容}},内容如果设置为-1,表示删除第一个,1则表示删除最后一个
db.students.update({"name":"王五"},{"$pop":{"course":1}});
//8.$pull:从数组内删除一个指定内容的数据
//----语法:{"$pull":{成员:数据}},进行数据比对的,如果是此数据则删除
//删除音乐
db.students.update({"name":"王五","$pull":{"course":"音乐"}});
//9.$pullAll:一次性删除的多个内容
/----语法:{"$pullAll":{成员:[数据1,数据2]}},
db.students.update({"name":"王五","$pull":{"course":["音乐","英语"]}});
//10.$rename:为成员名称重命名
//----语法:{"$rename":{旧的成员名称:新的成员名称}}
//将张三的name名称修改为“姓名”
db.students.update({"name":"张三"},{"$rename":{"name":"姓名"}});


// 删除数据remove()
//----删除条件:满足条件的数据被删除
//----是否只删除一个数据,如果设置为true或者是1表示只删除一个
db.infos.remove();//废弃,在2.X可用
//删除所有姓名带有‘大’的信息
db.students.remove({"$remove":/大/});
//删除一个姓名带有‘大’的信息
db.students.remove({"$remove":/大/},true);




// 游标,指的是数据可以一行行的进行操作,类似于ResultSet
//只需要使用find()函数,就可以返回游标了
var cursor=db.students.find();
cursor.hasNext();//判断是否有下一行数据
cursor.next();//取出当前数据
//例:
var cursor=db.students.find();
while(cursor.hasNext()){
var doc=cursor.next();
//print(doc.name);
printjson(doc);
}




// 索引
//查看默认状态下的students集合的索引内容
db.students.getIndexes();
//索引创建:db.集合.ensureIndex({列:1});
//----设置1表示索引按照升序方式排列,-1表示降序排列
db.students.ensureIndex({"age":-1});
db.students.find({"age":22}).explain();
db.students.find({"score":89}).explain();
db.students.find({"score":{"$eq":89}}).explain();
//复合索引,不会主动调用,强制调用使用hint();
db.students.ensureIndex({"age":-1,"score":-1},{"name":"age_-1_score_-1_index"});
db.students.find({"age":22,"score":89}).hint({"age":-1,"score":-1}).explain();
//删除一个索引
db.students.dropIndex({"age":-1,"score":-1});
//删除全部索引,删除所有非"_id"的索引,删除自定义的索引
db.students.dropIndexes();


// 唯一索引:用在某一字段上,是该字段内容不重复
//name 字段内容不允许重复
db.students.ensureIndex({"name":1},{"unique":true});


// 过期索引:在一些程序站点会出现若干秒之后信息被删除的情况
//设置过期索引
db.phones.ensureIndex({"time":1},{expireAfterSeconds:10});
show databases;
//在一个iphone集合里面设置过期索引,还需要保存时间信息
db.phones.insert({"tel":"110","code":"110","time":new Date()});
db.phones.insert({"tel":"111","code":"111","time":new Date()});
db.phones.insert({"tel":"112","code":"112","time":new Date()});
db.phones.insert({"tel":"113","code":"113","time":new Date()});
db.phones.insert({"tel":"114","code":"114","time":new Date()});
db.phones.insert({"tel":"115","code":"115","time":new Date()});


// 全文索引
db.news.insert({"title":"mldn","content":"lxh"});
db.news.insert({"title":"pkpk","content":"pkq"});
db.news.insert({"title":"zzzz","content":"but"});
db.news.insert({"title":"but","content":"nef"});
// 设置全文检索
db.news.ensureIndex({"title":"text","content":"text"});
//实现数据的模糊查询
//----要表示出全文检索,则使用“$text”判断符,进行数据查询则使用“$search”
//------查询指定关键字:{"$search":"查询关键字"}
//------查询多个关键字(或关系){"$search":"查询关键字 查询关键字...."}
//------查询多个关键字(与关系){"$search":"\"查询关键字\" \"查询关键字\"...."}
//------查询多个关键字(非关系){"$search":"查询关键字 查询关键字....-排除关键字"}
//单个内容查询
db.news.find({"$text":{"$search":"but"}});




// 地理信息索引,保存的是坐标,经纬度
//--2D平面索引
//--2DSphere球面索引
//定义商铺集合
db.shop.insert({loc:[10,10]});
db.shop.insert({loc:[10,11]});
db.shop.insert({loc:[11,10]});
db.shop.insert({loc:[12,19]});
db.shop.insert({loc:[15,12]});
db.shop.insert({loc:[40,110]});
//为集合定义2D索引
db.shop.ensureIndex({"loc":"2d"});
//"$near",查询,查询距离某个点最近的坐标
//"$geoWithin",查询,查询某个形状内的点
//假设我现在的点坐标是:{11,11}
db.shop.find({loc:{"$near":[11,11]}});
//查询距离范围,2D平面索引里面支持最大距离,不支持最小距离
db.shop.find({loc:{"$near":[11,11],"$maxDistance":5}});
//矩形范围
($box):{"$box":[[x1,y1],[x2,y2]]}
db.shop.find({loc:{"$geoWithin":{"$box":[[9,9],[11,11]]}}});
//圆形范围
($center):{"$center":[[x1,y1],r]};
db.shop.find(loc:{"$geoWithin":{"$center":[[10,10],2]}});
//多边形
($polygon):{"$polygon":[x1,y1],[[x2,y2],[x3,y3]...]};
//利用runCommand()实现信息查询

db.runCommand({"geoNear":"shop",near:[10,10],maxDistance:5,num:2});



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值