ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Mongodb高级查询

2020-08-28 14:32:34  阅读:169  来源: 互联网

标签:15 -- Mongodb age db 高级 查询 student find


1.查询操作符
1)条件操作符
--查找年龄大于13的学生
db.student.find({age:{$gt:13}});
--查找年龄小于15的学生
db.student.find({age:{$lt:15}});
--查找年龄大于等于13的学生
db.student.find({age:{$gte:13}});
--查找年龄小于等于15的学生
db.student.find({age:{$lte:15}});
--查找年龄小于15且大于13的学生
db.student.find({age:{$gt:13,$lt:15}});
2)$all匹配所有
--查找hobby包含"orage"和"apple"的学生
db.student.find({hobby:{$all:["orange","apple"]}});
3)$exists判断字段是否存在
--查询所有包含hobby字段的学生
db.student.find({hobby:{$exists,true}});
--查询所有不包含hobby字段的学生
db.student.find({hobby:{$exists,false}});
4)null值处理
--查找包含hobby字段且其值为null的学生
db.student.find({hobby:{"$in":[null],"exists":true}});
5)$mod取模运算
--查找学生年龄取模10后等于1的学生
db.student.find({age:{$mod,[10,1]}});
6)$ne不等于
--查找学生年龄不等于13的学生
db.student.find({age:{$ne:13}});
7)$in包含于
--查找年龄等于11,13,15的学生
db.student.find({age:{$in:[11,13,15]}});
8)$nin不包含于
--查找年龄不等于11,13,15的学生
db.student.find({age:{$nin:[11,13,15]}});
9)$size统计数组元素个数
--查找爱好等于3个的学生
db.student.find(hobby:{$size:3});
10)count查询记录条数
--查找总学生数
db.student.find().count();
db.student.find().skip(10).limit(5).count();
--查找11到15个学生数
db.student.find().skip(10).limit(5).count(true);
db.student.find().skip(10).limit(5).count(1);
db.student.find().skip(10).limit(5).count(10);
11)skip限制返回记录的起点
--返回11到15条结果记录
db.student.find().skip(10).limit(5)
12)sort排序
--将所有学生按年龄升序排序
db.student.find().sort({age:1});
--将所有学生按年龄降序排序
db.student.find().sort({age:-1});
13)distinct去重
--查找所有学生不重复的姓名
db.student.distinct(name);
14)group分组
--按班级和年龄分组统计所有男生的总分数
db.student.group({key:{grade:true,age:true},cond{gender:"male"},reduce:function(obj,prev) {prev.csum+=obj.score;},initial:{csum:0}});
2.查询语法
1)查询数组
--查询爱吃"apple"的学生
db.student.find({hobby:"apple"});
2)查询内嵌文档
--查询作者名为john的书
db.books.find({author.name,"john"});
--返回如下结果
{_id:10001,author:{name:"john",age:33},book:{name:"how to make more money",price:100$}};
3)正则表达式
--查询作者姓名"T"开头的作者
db.books.find({author.name,/^"T"/});
--查询作者姓名不以"y"结尾的作者
db.books.find({author.name,/$"y"/});
4)$where条件
--查找年龄大于15的学生
db.student.find(age:{$gt:15});
db.student.find("this.age>15");
--后一种方式以为会发生bson到javascript的转换,性能较差,尽量别用.
3.联合查询
不像关系库,mongodb不适于关联查询,但业务十分必要,也只能想办法处理,目前可以通过手工关联和DBRef方式解决.
1)手工关联
--取得作者对象ao
ao=db.books.findone({author.name:"John"});
--通过作者对象ao获取评价对象po
for(var po=db.postings.find.({author:ao.author.name});po.hasNext();) {printjson(po.next.comment)};
2)DBRef方式
--取得作者信息
ao=db.books.find({author.name:"John"});
--关联作者信息发帖
db.postings.insert({comment:"good book!"},author:[new DBRef('author',ao._id)]});
--通过帖子查找书信息
db.postings.find({comment:"good book!"})[0].books[0].fetch();
4.游标和存储过程
1)游标
--打出所有学生信息
for(var c=db.student.find();c.hasNext();) {printjson(c.next())};
db.student.find().forEach(function(st) {printjson(st)});
2)存储过程
--mongodb存储过程存储于db.system.js.
--创建一个简单存储过程
db.system.js.save({_id:"p_addnums",value:function(x,y){return x*y}});
--查看存储过程是否已被创建
db.system.js.find({_id:"p_addnums"});
--调用已创建的存储过程
db.eval('p_addnums(2,3)');


标签:15,--,Mongodb,age,db,高级,查询,student,find
来源: https://www.cnblogs.com/lhdz_bj/p/13577285.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有