查询工具:Robo 3T。
1.基本查询
//基本查询一条记录
db.qtfm__album_info.findOne()
//多条件查询(相当于where)
db.qtfm_album_info.find({"name":"七里香","author":"周杰伦"})
//只返回主键和指定得文档键值对
db.qtfm_album_info.find({},{"name":1,"author":1})
//指定不返回得键值对(0、1为boolean型,同时存在0、1会报错)
db.qtfm_album_info.find({},{"name":0,"sectionNum":0})
2.条件查询
操作符 $lt、$lte、$gt、$gte、$ne依次为<、<=、>、>=、!=
//查询章节数量>=1并且<=3的记录
db.qtfm_album_info.find({"sectionNum":{"$gte":1,"$lte":3}})
//查询name不等于**的记录
db.qtfm_album_info.find({"name":{"$ne":"七里香"}})
//$in数组查询(list中的数据可以为不同类型)
db.qtfm_album_info.find({"name":{"$in":["七里香","叶惠美",123]}})
//$nin相当于not in,查询不在数组中的数据
db.qtfm_album_info.find({"name":{"$nin":["七里香","叶惠美"]}})
//$or或查询
db.qtfm_album_info.find({"$or":[{"name":"等你下课"},{"code":"TT0000057"}]})
//$or和$in混合使用
db.qtfm_album_info.find({"$or":[{"name":{"$in":["等你下课","范特西"]}},{"code":"TT0000057"}]})
//$not取反
db.qtfm_album_info.find({"name":{"$not":{"$in":["等你下课","叶惠美"]}}})
//时间戳查询
db.pet_settlement_recod.update({"status":"settled","settlementTime":{"$gte":1604332800000,"$lte":1604419200000},"deleted":false,"hospitalId":"5f283079cba1b2b9f39783e8"},{$set: {"calculate": 5}}, {multi: true})
3.null查询
//null查询(包含没有指定键的记录)
db.qtfm_album_info.find({"name":null})
//通过$exists判断指定键是否存在并且为null的记录(不包括"")
db.qtfm_album_info.find({"name":{"$in": [null], "$exists":true}})
4.正则查询(Perl规则)
db.qtfm_album_info.find({"name":/tes?/i})
5.数组查询条件
6.内嵌文档查询
7.游标
//查询最大值
db.qtfm_album_info.find({"deleted":false},{"orderNum":1}).sort({"orderNum":-1}).limit(1)
db.getCollection('pet_user_info').find({"positions":{$elemMatch:{code:'doctor',code:'sales'}}})
db.getCollection('pet_user_info').find({"positions.code":{$in:["doctor","sales"]}})
8.更新表中某字段为另一个字段
db.getCollection('pet_goods_sales').find({}).forEach(
function(item){
db.getCollection('pet_goods_sales').update({"_id":item._id},{"$set":{"remark":item.price}},false,true)
}
)
db.getCollection('pet_goods_sales').find({"petServices":{"$exists":true},"petServicesId":{"$exists":false}}).forEach(
function(item){
db.getCollection('pet_goods_sales').update({},{$set:{petServicesId:item.petServices.$id.str}},false,false)
}
)
db.pet_bill_record.update({"code":{$exists:false}},{$set: {"deleted": true}}, {multi: true})
//update参数说明
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。
9.插入文档
db.getCollection('pet_goods_sales').insert({price:"99999"})
10.插入某字段
db.pet_goods_sales.update({},{$set:{content:"hhh"}},false,true)
//更新某字段
db.pet_goods_sales.update({},{$rename:{"content":"contenthhh"}},false,true)
//去掉某字段
db.pet_goods_sales.update({},{$unset:{"contenthhh":""}},false,true)
11.排序
db.COLLECTION_NAME.find().sort({KEY:1})
//1是正序,-1是倒叙
12.去掉undefined数据
db.getCollection('pet_pet').find({"hospital":{$type:"undefined"}}).forEach(
function(item){
db.getCollection('pet_pet').update({"_id":item._id},{$set:{"hospital":null}})
}
)
13.查询表中某个字段数量>1
db.getCollection('pet_bill_record').aggregate([{
$group: {
_id: '$objectId',
count: {
$sum: 1
}
}
}, {
$match: {
count: {
$gt: 1
}
}
}])
此方法转换成java写法
Criteria criteria = new Criteria("total").gt(1);
Aggregation agg = Aggregation.newAggregation(Aggregation.group("objectId").count().as("total"), Aggregation.match(criteria));
AggregationResults<BillRecord> result = ops.aggregate(agg, "pet_bill_record", BillRecord.class);
List<BillRecord> lists = result.getMappedResults();
14.判断某字段类型
//$type:7表示查询字段为ObjectId类型
db.getCollection('pet_goods_sales').find({
"petServices": {
"$exists": true
},
"petServicesId": {$type:7}
}).forEach(
function(item) {
db.getCollection('pet_goods_sales').update({
_id: item._id
}, {
$set: {
petServicesId: item.petServices.$id.str
}
}, {
multi: true
})
}
)
数字对应类型:
15.关联查询某字段的数量
db.getCollection("pet_goods_sales").find({}).forEach(function(item) {
var countnum = db.pet_settlement_recod.find({
"details.$id": item._id
}).count();
db.getCollection("pet_goods_sales").update({
_id: item._id
}, {
$set: {
countnum: countnum
}
}, {
multi: true
});
});