MongoDB使用查询总结

查询工具:Robo 3T。

下载地址:https://robomongo.org/


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
    });
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qsya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值