spring-data-mongodb 使用 fieldName 而不是 _id

     2023-02-16     127

关键词:

【中文标题】spring-data-mongodb 使用 fieldName 而不是 _id【英文标题】:spring-data-mongodb using the fieldName instead of _id 【发布时间】:2019-10-08 12:46:41 【问题描述】:

我有一个属性为

的 Pojo
    Class A 
        @Id
        @Field("item_id")
        private String itemId;
    

当我尝试根据 itemId 更新 MongoDB 集合中的文档时,它运行良好,并且能够从 mongo ops 日志中看到查询已转换为“itemIds 中的_id”

Query query = new Query(Criteria.where("itemId").in(itemIds));
Update update = new Update();
update.set("field2", "abd");
mongoTemplate.updateMulti(query, update, A.class)

当我升级到 spring-data-mongodb-2.1.5.RELEASE 时,我在 mongo 日志中看到的查询是“item_id in itemIds”。由于 item_id 不是字段并且集合中没有该字段的索引,因此查询需要很长时间才能完成。

任何帮助理解为什么 spring-data 库在旧版本中将查询构建为 _id 并在新版本中使用该字段?

【问题讨论】:

【参考方案1】:

在 Spring 文档 (https://docs.spring.io/spring-data/mongodb/docs/1.3.3.RELEASE/reference/html/mapping-chapter.html) 上搜索 2 分钟后:

以下概述了将映射到“_id”文档字段的字段:

使用@Id (org.springframework.data.annotation.Id) 注释的字段将映射到“_id”字段。 没有注释但命名为 id 的字段将映射到“_id”字段。

你试过了吗?

【讨论】:

是的,我们已经在使用@Id。文档还说docs.spring.io/spring-data/mongodb/docs/2.1.5.RELEASE/reference/… 您确实使用了@Id,但也使用了@Field,它旨在覆盖列的名称。所以,请尽量去掉@Field注解,只保留@Id一个

将 Spring 安全 ACL 与 spring-data-mongodb 一起使用

】将Spring安全ACL与spring-data-mongodb一起使用【英文标题】:UsingSpringsecurityACLswithspring-data-mongodb【发布时间】:2017-11-0704:23:57【问题描述】:spring-security-acl文档声明如下:Pleasenotethatourout-of-the-boxAclServiceandrelateddatabaseclassesalluse 查看详情

spring-data-mongodb使用原生aggregate语句(更新中)

除了特殊注释外,本文的测试结果均基于spring-data-mongodb:1.10.6.RELEASE(spring-boot-starter:1.5.6.RELEASE),MongoDB3.0.6   考虑到大多数人都是来找答案的,所以先给出结论//importorg.springframework.data.mongodb.core.MongoTemplate;mongoTempl 查看详情

spring-data-mongodb 使用 fieldName 而不是 _id

】spring-data-mongodb使用fieldName而不是_id【英文标题】:spring-data-mongodbusingthefieldNameinsteadof_id【发布时间】:2019-10-0812:46:41【问题描述】:我有一个属性为的PojoClassA@Id@Field("item_id")privateStringitemId;当我尝试根据itemId更新MongoDB集合中... 查看详情

使用 Kotlin 的 spring-data-mongodb 上的 @Transient 在读取期间导致异常

】使用Kotlin的spring-data-mongodb上的@Transient在读取期间导致异常【英文标题】:@Transientonspring-data-mongodbwithKotlinresultsinexceptionduringread【发布时间】:2019-06-0607:53:51【问题描述】:我的项目中使用Kotlin、SpringBoot2.0和MongoDB(使用SpringDa... 查看详情

mongodb分组函数的使用(spring-data-mongodb)

这两天要做mongodb日志的模块,下面记录一下。一、首先要导入一批数据,使用springboot来完成。配置mongodb的复制集:在application.yml文件中配置uri来完成格式:mongodb://用户名:密码@ip:端口[,ip:端口][,ip:端口]/数据库名下面注入mongoTem... 查看详情

MongoDB Aggregation - 如何使用 spring-data-mongodb 将查询表达式应用到匹配阶段?

】MongoDBAggregation-如何使用spring-data-mongodb将查询表达式应用到匹配阶段?【英文标题】:MongoDBAggregation-Howcaniapplyqueryexpressionintomatchstageusingspring-data-mongodb?【发布时间】:2021-12-0623:59:05【问题描述】:我有包含动态字段的文档,我... 查看详情

如何在 spring-boot 中禁用 spring-data-mongodb 自动配置

】如何在spring-boot中禁用spring-data-mongodb自动配置【英文标题】:Howtodisablespring-data-mongodbautoconfigurationinspring-boot【发布时间】:2015-04-2903:39:04【问题描述】:有没有人试过在spring-boot中禁用mongodb的自动配置?我正在尝试使用spring-d... 查看详情

是否可以在 spring-data-mongodb 中注入自定义 Jackson ObjectMapper?

】是否可以在spring-data-mongodb中注入自定义JacksonObjectMapper?【英文标题】:IsispossibletoinjectacustomJacksonObjectMapperinspring-data-mongodb?【发布时间】:2014-02-2312:50:12【问题描述】:我们在我们的应用程序中使用CodaHale指标,并使用Json模... 查看详情

spring-data-mongodb 在一个 Mongo 实例中连接多个数据库

】spring-data-mongodb在一个Mongo实例中连接多个数据库【英文标题】:Spring-data-mongodbconnecttomultipledatabasesinoneMongoinstance【发布时间】:2012-08-1804:53:40【问题描述】:我正在使用最新的spring-data-mongodb(1.1.0.M2)和最新的MongoDriver(2.9.0-RC1)。... 查看详情

如何以 ManyToMany (RDBMS) 的形式加入两个集合 spring-data-mongodb

】如何以ManyToMany(RDBMS)的形式加入两个集合spring-data-mongodb【英文标题】:HowcanIjointwocollectionsspring-data-mongdbasManyToMany(RDBMS)【发布时间】:2017-05-2222:16:59【问题描述】:我有来自https://github.com/szerhusenBC/jwt-spring-security-demo/的这个示... 查看详情

spring-data-mongodb中的mongotemplate与mongorepository

(一)、SpringData概述 SpringData:Spring的一个子项目。用于简化数据库访问,支持NoSQL和关系数据存储。其主要目标是使数据库的访问变得方便快捷。●SpringData项目所支持NoSQL存储:MongoDB(文档数据库)Neo4j(图形数据库)Redis(键... 查看详情

iOS 7:通过 wi-fi 或对等 wi-fi 使用 Multipeer Connectivity 连接设备

】iOS7:通过wi-fi或对等wi-fi使用MultipeerConnectivity连接设备【英文标题】:iOS7:ConnectingdevicesusingMultipeerConnectivityviawi-fiorpeertopeerwi-fi【发布时间】:2014-01-2713:37:54【问题描述】:我正在尝试通过iOS7中的Multipeer连接框架连接2个iOS7设备... 查看详情

nodemcu学习笔记---wi-fi连接使用(代码片段)

NodeMCU学习笔记(3)—WI-FI连接使用提示:作者使用ESP8266进行开发学习。文章目录前言一、NodeMCUWI-FI无线模式二、WI-FI常用函数三、WI-FI连接四、总结前言    NodeMCU强大之处是继承了ESP8266的WI-FI功能,可以直接... 查看详情

nodemcu学习笔记---wi-fi连接使用(代码片段)

NodeMCU学习笔记(3)—WI-FI连接使用提示:作者使用ESP8266进行开发学习。文章目录前言一、NodeMCUWI-FI无线模式二、WI-FI常用函数三、WI-FI连接四、总结前言    NodeMCU强大之处是继承了ESP8266的WI-FI功能,可以直接... 查看详情

同时使用 Android 以太网和 Wi-Fi

】同时使用Android以太网和Wi-Fi【英文标题】:AndroidEthernetandWi-Fiatthesametime【发布时间】:2013-08-1104:47:11【问题描述】:我有一个运行Android的小型电视盒设备。每当我打开Wi-Fi接口时,以太网接口就会断开连接。如果我随后调出以... 查看详情

通过 Wi-Fi 使用 TCP 将 Android 应用程序连接到 IoT 设备

】通过Wi-Fi使用TCP将Android应用程序连接到IoT设备【英文标题】:ConnectAndroidApptoIoTdeviceusingTCPthroughWi-Fi【发布时间】:2021-05-2510:57:02【问题描述】:我有一个Android应用程序和一个IoT设备,它们的连接和通信将通过Wi-Fi进行。物联网... 查看详情

使用 Android 智能手机的 Wi-Fi 热点进行 Chrome 投射[关闭]

】使用Android智能手机的Wi-Fi热点进行Chrome投射[关闭]【英文标题】:ChromecastusingWi-FiHotSpotofAndroidSmartphone[closed]【发布时间】:2013-08-0108:51:38【问题描述】:可以使用我的Android智能手机的Wi-Fi热点使用chromecast吗?ModelNumber:GalaxyNexus(... 查看详情

使用 Wi-Fi 创建 P2P 连接:消息传递问题

】使用Wi-Fi创建P2P连接:消息传递问题【英文标题】:CreatingP2PConnectionswithWi-Fi:Messagepassingissue【发布时间】:2017-04-1407:07:15【问题描述】:我正在使用WifiP2P连接使用以下教程在两个Android设备之间发送和接收消息https://developer.andro... 查看详情