资讯专栏INFORMATION COLUMN

mongoDB原生查询与spring data mongoDB的映射

ziwenxie / 1936人阅读

摘要:一按照等条件组合查询,同时添加和原生二执行操作,更新单个文档原生三通过命令更新文档并且返回更新之后的文档只能作用于单个文档原生四聚合操作根据某一字段,并且将文档中的某一字段合并到数组中,最后取数组中的第一个元素原生五数组查询,在某个中包

一、按照in、eq、lte等条件组合查询,同时添加sort和limit
1、原生

</>复制代码

  1. db.message.find(
  2. { receiverRoleId: {$in: [1381073, 1381073]},
  3. resourceType:3,
  4. sendTime: {$lte: 1523355918300}
  5. })
  6. .sort({sendTime: -1 })
  7. .limit(10);

2、spring data mongoDB

</>复制代码

  1. Criteria criteria = Criteria.where("receiverRoleId").in(receiverRoleIds)
  2. .and("readState").is(readState.getIndex())
  3. .and("sendTime").lte(sendTime);
  4. Query query = Query.query(criteria);
  5. query.with(new Sort(Sort.Direction.DESC, "sendTime"));
  6. query.limit(count);
  7. mongoTemplate.find(query, Notification.class);

二、执行update操作,更新单个文档
1、原生

</>复制代码

  1. db.message.update(
  2. {_id: 586537, readState: 2},
  3. {$set: {readState: 1}},
  4. {multi: false}
  5. );

2、spring data mongoDB

</>复制代码

  1. Criteria criteria = Criteria.where("_id").is(id).and("readState").is(ReadState.UNREAD.getIndex());
  2. Query query = Query.query(criteria);
  3. Update update = Update.update("readState", ReadState.READ.getIndex());
  4. mongoTemplate.updateFirst(query, update, Notification.class);

三、通过findAndModify命令更新文档并且返回更新之后的文档(只能作用于单个文档)
1、原生

</>复制代码

  1. db.message.findAndModify({
  2. query: {_id: 586537, readState: 2},
  3. update: {$set: {publishType: 1}},
  4. new: true
  5. });

2、spring data mongoDB

</>复制代码

  1. Query query = Query.query(Criteria.where("_id").is(2).and("readState").is(2));
  2. Update update = Update.update("publishType", 1);
  3. Notice updateResult = mongoTemplate.findAndModify(
  4. query,
  5. update,
  6. FindAndModifyOptions.options().returnNew(true),
  7. Notice.class
  8. );

四、聚合操作(根据某一字段group,并且将文档中的某一字段合并到数组中,最后取数组中的第一个元素)
1、原生

</>复制代码

  1. db.message.aggregate([
  2. { $match: {toAffairId : {$in: [590934, 591016]}} },
  3. { $sort: {sendTime: -1} },
  4. { $group: {_id: "$toAffairId", contents: {$push: "$content"}} },
  5. { $project: {_id: 0, "affaiId": "$_id", contents: {$slice: ["$contents", 1]} } }
  6. ]);

2、spring data mongoDB

</>复制代码

  1. Criteria criteria = Criteria.where("toAffairId").in(affairIds);
  2. Aggregation aggregation = Aggregation.newAggregation(
  3. match(criteria),
  4. sort(Sort.Direction.DESC, "sendTime"),
  5. group("toAffairId").push("content").as("contents"),
  6. AggregationResults results = mongoTemplate.aggregate(
  7. aggregation,
  8. collectionName,
  9. MobileDynamicMessageDataModel.class
  10. );

五、数组查询,在某个document中包含数组,对数组进行过滤,并返回数组中第一个符合条件的元素
1、原生

</>复制代码

  1. db.audit_record.find(
  2. { criteriaAuditRecords: {$elemMatch: {personalAuditIds: {$in: [12180209]}}} }
  3. ).project({"_id":1, "criteriaAuditRecords.$":1});

2、spring data mongoDB

</>复制代码

  1. Criteria criteria = Criteria.where("criteriaAuditRecords").elemMatch(Criteria.where("personalAuditIds").in(personalAuditId));
  2. Query query = Query.query(criteria);
  3. query.fields().include("_id").include("criteriaAuditRecords.$");
  4. return mongoTemplate.findOne(query, AuditRecord.class);

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/19480.html

相关文章

  • 使用Spring Data MongoDB持久化文档数据

    摘要:介绍非关系型数据是文档型数据,文档是独立的实体,文档数据库不适用于关联关系明显的数据提供了三种方式在应用中使用通过注解实现对象文档映射使用实现基于模板的数据库访问自动化的运行时生成功能注解将类型映射为文档这是一个文档指定覆盖默认的域名启用 介绍 NoSQL:not only SQL,非关系型数据 MongoDB是文档型数据,文档是独立的实体,文档数据库不适用于关联关系明显的数据 S...

    alighters 评论0 收藏0
  • 使用Spring Data MongoDB持久化文档数据

    摘要:介绍非关系型数据是文档型数据,文档是独立的实体,文档数据库不适用于关联关系明显的数据提供了三种方式在应用中使用通过注解实现对象文档映射使用实现基于模板的数据库访问自动化的运行时生成功能注解将类型映射为文档这是一个文档指定覆盖默认的域名启用 介绍 NoSQL:not only SQL,非关系型数据 MongoDB是文档型数据,文档是独立的实体,文档数据库不适用于关联关系明显的数据 S...

    go4it 评论0 收藏0
  • Spring Boot 中使用 MongoDB 增删改查

    摘要:声明构造函数,作用是把从数据库取出的数据实例化为对象。该构造函数传入的值为从中取出的数据省略接口提供增删改查接口实现提供增删改查接口实现提供了一个类似于的设计的类。 本文快速入门,MongoDB 结合SpringBoot starter-data-mongodb 进行增删改查 1、什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。...

    ranwu 评论0 收藏0
  • spring-data-mongodb查询使用一些总结

    摘要:踩到许多坑,记录下一些基于的东西吧首先。王大锤那么查询的时候,如果要根据查询班级怎么办,的查询也非常简单。详情可以查看官方文档用法 刚接触mongodb不久。踩到许多坑,记录下一些基于spring-data-mongodb的东西吧 首先。应该了解下什么情况下使用mongodb,什么情况下用mysql: 业务需要事物,使用mysql,因为mongodb不支持事物 数据量大,但是数据本身...

    jollywing 评论0 收藏0
  • spring-data-mongodb查询使用一些总结

    摘要:踩到许多坑,记录下一些基于的东西吧首先。王大锤那么查询的时候,如果要根据查询班级怎么办,的查询也非常简单。详情可以查看官方文档用法 刚接触mongodb不久。踩到许多坑,记录下一些基于spring-data-mongodb的东西吧 首先。应该了解下什么情况下使用mongodb,什么情况下用mysql: 业务需要事物,使用mysql,因为mongodb不支持事物 数据量大,但是数据本身...

    FuisonDesign 评论0 收藏0

发表评论

0条评论

ziwenxie

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<