MongoDB使用总结

MongoDB使用总结

常用语句

查询
command

    db.getCollection('data').find({"id":"233"})

java

    Query query = new Query();
    query.addCriteria(Criteria.where("id").is("233"));
    return mongoTemplate.find(query, Data.class);

插入
command

    db.info.insert({id: '121456516', 
        cid: '001',
        ctime: ISODate("2021-07-09T08:48:46.103Z")
    })

java

    Info info = new Info()
    info.setId(CommonUtils.getUUID());
    info.setCid("001");
    info.setCtime(new Date());
    mongoTemplate.insert(info);

update command

    db.data.update({"creator_id":''},{$set:{"creator_id":'374103'}},{multi:true});

java

    Query query = Query.query(Criteria.where("creator_id").is(""));
    Update update = new Update();
    update.set("creator_id", 374103);
    mongoTemplate.updateMulti(query, update, Data.class);

remove command

    db.data.remove({"modify_id":"test111111111111111111"});

java

    Query query = new Query(Criteria.where("modify_id").is(test111111111111111111));
    mongoTemplate.remove(query, Data.class);

group语句

command

db.info_data.aggregate([
    {
        "$match": {  // 查询条件
            "user_id": "098581",
            "status": "0"
        }
    },
    {
        "$project": { // 使用到的参数
            "col_id": 1,
            "user_id": 1,
            "id": 1,
            "status": 1,
            "ctime":1,
        }
    },
    {
        "$group": { // group以及聚合操作(包含重命名)
            "_id": "$col_id",
            "user_id": {
                "$max": "$user_id"
            },
            "col_agg_id" :{
                "$max": "$id"
                },
            "data_status":{
                "$min":"$status"
             },
        }
    },
    {
        "$sort": {
            "ctime": -1
        }
    }
])

java

        List<Field> fieldList = new ArrayList<>();
        fieldList.add(Fields.field("col_id"));
        fieldList.add(Fields.field("user_id"));
        fieldList.add(Fields.field("id"));
        fieldList.add(Fields.field("status"));
        fieldList.add(Fields.field("ctime"));

        Fields fields = Fields.from(fieldList.toArray(new Field[0]));

        // 要哪些字段
        Aggregation colAgg = Aggregation.newAggregation(

                StringUtils.isTrimEmpty(status) ?
                        Aggregation.match(
                                Criteria.where("user_id").is(currentId)
                                        .and("ctime").gte(startDate).lte(endDate)
                        ) :
                        Aggregation.match(
                                Criteria.where("user_id").is(currentId)
                                        .and("status").is(status)
                                        .and("ctime").gte(startDate).lte(endDate)
                        ),


                Aggregation.project(fields),

                // 分组
                Aggregation.group("col_id")
                        .max("user_id").as("user_id")
                        .max("id").as("col_agg_id")
                        .max("status").as("data_status")
                        .max("ctime").as("ctime"),
                // 排序
                Aggregation.sort(Sort.Direction.DESC, "ctime")
        );
        // 执行查询,这里的shop必须是查询的主表名
        AggregationResults<MyPartColBean> colResults = mongoTemplate.aggregate(colAgg, "info_data", MyPartColBean.class);
        if (colResults.getMappedResults() != null) {
            List<MyPartColBean> colAggBeans = colResults.getMappedResults();
        }

关联查询
command

db.info_collection.aggregate([
        {
            "$lookup": {
                "from": "info_down",
                "localField": "id",
                "foreignField": "col_id",
                "as": "col_down"
            }
        },
        {
            "$match": {
                "col_down.accept_user_id": "098581",
                "status": "1",
            }
        },
        {
            "$project": {
                "col_down": 1,
                "name": 1,
                "status": 1,
                "mode": 1,
                "type": 1,
                "end_time": 1,
            }
        },
        {
            "$unwind": "$col_down"
        },
        {
            "$sort": {
                "ctime": -1
            }
        }
    ]
)

java

        // 构建 Aggregation:添加查询条件 下发表数据
        Aggregation downAgg = Aggregation.newAggregation(

                // 关联info_down表
                Aggregation.lookup(
                        "info_down",           // 从表表名
                        "id",           // 主表被参考键键
                        "col_id",    // 从表参考键
                        "col_down"       // 联合查询出的别名,用于多条件查询表明前缀,相当于SQL中的临时表名
                ),
                // ============================================= 以上内容可举一反三 =============================================

                StringUtils.isTrimEmpty(status) ?
                        Aggregation.match(
                                Criteria.where("col_down.accept_user_id").is(currentId)
                                        .and("status").is("1")
                                        .and("col_down.ctime").gte(startDate).lte(endDate)
                        ) :
                        Aggregation.match(
                                Criteria.where("col_down.accept_user_id").is(currentId)
                                        .and("status").is("1")
                                        .and("col_down.coll_status").is(status)
                                        .and("col_down.ctime").gte(startDate).lte(endDate)
                        ),

                // 要哪些字段 info_collection info_down
                Aggregation.project("col_down", "name", "status", "mode", "type",
                        "end_time"),
                // 拆表 主表字段冗余 展开从表
                Aggregation.unwind("col_down"),
                // 排序
                Aggregation.sort(Sort.Direction.DESC, "ctime")
        );
        // 执行查询,这里的shop必须是查询的主表名
        AggregationResults<MyPartColBean> results = mongoTemplate.aggregate(downAgg, "info_collection", MyPartColBean.class);
        List<MyPartColBean> colBeans = results.getMappedResults();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值