MongoDB的查询

时间之间查询语句

{"status":"final_publish","createType":"1","createTime":{$gte:ISODate("2013-01-01T00:00:00Z"),$lte:ISODate("2014-01-01T00:00:00Z")}}


1 制定返回的键,0是指定不返回,1是指定返回

   db.persons.find({  },{ _id:0,age:1})

 

2 查询条件$lt,$lte,$gt,$gte,$ne

   查询年龄在25-27之间的学生

   db.persons.find({age:{$gt:25,$lt:27}})

 

3 查询所有年龄不是26岁的学生

   db.persons.find({age:{$ne:26}})

 

4查询国籍中是中国或者是美国的学生
   db.persons.find({country:{$in:["china","USA"]}})

 

5查询所有不是韩国学生的数学成绩

     db.persons.find({country:{$nin:["korea"]}},{score:1})

 

6查询语文成绩大于85或者英语成绩小于90的学生

    db.persons.find({$or:[{c:{$gt:85}}, {e:{$lt:90} } ] })

  

7 查询出名字中存在"erica"的学生,注意没有" "号

  db.persons.find({name:/erica/i})

 

8查询出名字不是"erica"的学生的信息

  db.persons.find({name:{$not:/erica/i}})

 

9查询总喜欢看mongodb和js的学生,如果需要多个元素来匹配数组,就要用$all,数组顺序不重要

  db.persons.find({books:{$all:["mongodb","js"]}})

 

 10 查询第二本书是java的学生

   db.persons.find({"books.1":"java" } )

 

11查询出喜欢的书籍是2本的学生 

  db.persons.find({"books":{$size:2}} )

 

12查询出jim最后一本书  $slice

    db.persons.find({name:"bb"},{"books":{$slice:-1}} )

13找到在K学校上过学,并且成绩是A的(嵌套文档)

1 造三条数据

db.persons.insert({name:"jim",school:[{school:"K",score:"A"},{school:"L",score:"B"},{school:"J",score:"A+"}]})


db.persons.insert({name:"Tom",school:[{school:"K",score:"B"},{school:"L",score:"A"},{school:"J",score:"A+"}]})

db.persons.insert({name:"Jetty",school:[{school:"M",score:"A"},{school:"L",score:"A"},{school:"J",score:"A+"}]})

解决方法:

1 可以用完全匹配

 db.persons.find({school:{school:"K",score:"A"}})

 

2为了解决顺序问题,可以用对象.方式

db.persons.find({"school.school":"K","school.score":"A"})

但是会把 "school.school":"K" 或者"school.score":"A" 都查出来,不满足要求

 

3 正确单条条件组查询$elemMatch,满足这个组合所有条件才可以

 db.persons.find({school:{$elemMatch:{score:"A",school:"K"}}})

 

14 查询persons文档中前两条数据

 db.persons.find({}).limit(2)

 

15查询persons文档中2-3条数据

   db.persons.find({}).limit(2).skip(1)

 

 

16 查询快照,那么一定要使用高级查询

 db.persons.find({$query:{name:"Tom"},$snapshot:true} )

 

 17 查询persons中中国学生人数

 db.persons.find({country:china}).count();

 

18 查询出persons一共有多少个国家,分别是什么

  db.runCommand({distinct:"persons",key:"country"}).values

 

19 查询出每个国家大于90分的人是哪些

db.persons.group({
 key : {"country":true},
 cond : {"score":{$gt:90}},
 initial : {score:0},
 reduce : function Reduce(doc, out) {
 /*

 // At start of Reduce, 'out' = intial value
 out.count += doc.count;
 
 */
 
 if(doc.score>out.score){
                             out.name=doc.name;
                             out.score=doc.score;                         
                             out.country=doc.country;
                                       }
                         
                   
 
},
 finalize : function Finalize(out) {
 /* 
 
 // Make final updates or calculations
 out.countSquare = out.count * out.count
 
 */

 return out;
}
});

 

20 当分组的时候大小写问题,比如有的是country,有的是Country

db.persons.group({
 keyf : function(x){

    return{ country:x.country.toLowerCase()}
},
 cond : {"score":{$gt:90}},
 initial : {score:0},
 reduce : function Reduce(doc, out) {
 /*

 // At start of Reduce, 'out' = intial value
 out.count += doc.count;
 
 */
 
 if(doc.score>out.score){
                             out.name=doc.name;
                             out.score=doc.score;                         
                             out.country=doc.country;
                                       }
                         
                   
 
},
 finalize : function Finalize(out) {
 /* 
 
 // Make final updates or calculations
 out.countSquare = out.count * out.count
 
 */

 return out;
}
});

查询结果如下:

 

 

 

 

如果按19的查询条件来查询结果,会有四条记录,china的大小写分别在不同的组,是错误的。

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值