时间之间查询语句
{"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的大小写分别在不同的组,是错误的。