_id字段的映射:

MongoDB要求所有的document都要有一个_id的字段。

如果我们在使用中没有传入_id字段,它会自己创建一个ObjectId.

{ "_id" : ObjectId("53e0ff0b0364cb4a98ce3bfd"), "_class" : "org.springframework.data.mongodb.examples.hello.domain.Person", "name" : "John", "age" : , "accounts" : [ { "_id" : null, "accountNumber" : "1234-59873-893-1", "accountType" : "SAVINGS", "balance" : 123.45 } ] }

MongoMappingConverter按照下面的规则将java class对应到_id字段:

1. 被标记为@Id (org.springframework.data.annotation.Id) 的字段或者属性。

2. 没有标记,但是名字是id的字段或者属性(类型为string或者BigInteger)。

类型映射

如果一个object中包含另一个object,默认存放在_class字段下,例如

public class Sample {
Contact value;
} public abstract class Contact { … } public class Person extends Contact { … } Sample sample = new Sample();
sample.value = new Person(); mongoTemplate.save(sample); { "_class" : "com.acme.Sample",
"value" : { "_class" : "com.acme.Person" }
}

通过使用@TypeAlias可以把在_class下面存放的值变成固定的值,下面的例子为pers。

@TypeAlias("pers")
class Person { }

定义自己的MongoTypeMapper

1. 使用java config

class CustomMongoTypeMapper extends DefaultMongoTypeMapper {
//implement custom type mapping here
}
@Configuration
class SampleMongoConfiguration extends AbstractMongoConfiguration { @Override
protected String getDatabaseName() {
return "database";
} @Override
public Mongo mongo() throws Exception {
return new Mongo();
} @Bean
@Override
public MappingMongoConverter mappingMongoConverter() throws Exception {
MappingMongoConverter mmc = super.mappingMongoConverter();
mmc.setTypeMapper(customTypeMapper());
return mmc;
} @Bean
public MongoTypeMapper customTypeMapper() {
return new CustomMongoTypeMapper();
}
}

2. 使用xml

<mongo:mapping-converter type-mapper-ref="customMongoTypeMapper"/>

<bean name="customMongoTypeMapper" class="com.bubu.mongo.CustomMongoTypeMapper"/>

[Spring Data MongoDB]学习笔记--_id和类型映射的更多相关文章

  1. [Spring Data MongoDB]学习笔记--MongoTemplate查询操作

    查询操作主要用到两个类:Query, Criteria 所有的find方法都需要一个query的object. 1. 直接通过json来查找,不过这种方式在代码中是不推荐的. BasicQuery q ...

  2. [Spring Data MongoDB]学习笔记--MongoTemplate插入修改操作

    插入操作: 直接给个例子 import static org.springframework.data.mongodb.core.query.Criteria.where; import static ...

  3. [Spring Data MongoDB]学习笔记--牛逼的MongoTemplate

    MongoTemplate是数据库和代码之间的接口,对数据库的操作都在它里面. 注:MongoTemplate是线程安全的. MongoTemplate实现了interface MongoOperat ...

  4. [Spring Data MongoDB]学习笔记--建立数据库的连接

    1. 有了上一篇的Mongo后,连接数据库我们还需要更多的信息,比如数据库名字,用户名和密码等. 我们可以继续来配置MongoDbFactory的实例. public interface MongoD ...

  5. [Spring Data MongoDB]学习笔记--MapReduce

    mongodb的MapReduce主要包含两个方法:map和reduce. 举个例子,假设现在有下面3条记录 { "_id" : ObjectId("4e5ff893c0 ...

  6. [Spring Data MongoDB]学习笔记--注册一个Mongo实例

    1. 通过Java based bean metadata @Configuration public class AppConfig { public @Bean Mongo mongo() thr ...

  7. 031 Spring Data Elasticsearch学习笔记---重点掌握第5节高级查询和第6节聚合部分

    Elasticsearch提供的Java客户端有一些不太方便的地方: 很多地方需要拼接Json字符串,在java中拼接字符串有多恐怖你应该懂的 需要自己把对象序列化为json存储 查询到结果也需要自己 ...

  8. [Spring Data Repositories]学习笔记--使用现有的repository

    以下内容是在学习Spring-Data-mongoDB中的Spring Data Repositories时做的一些笔记.备忘! 感觉学习还是看官方的资料比较透彻一些. Spring Data Rep ...

  9. spring data jpa 学习笔记

    springboot 集成 springData Jpa 1.在pom.xml添加依赖 <!-- SpringData-Jpa依赖--> <dependency <groupI ...

随机推荐

  1. Codeforces Round #307 (Div. 2) D. GukiZ and Binary Operations (矩阵高速幂)

    题目地址:http://codeforces.com/contest/551/problem/D 分析下公式能够知道,相当于每一位上放0或者1使得最后成为0或者1.假设最后是0的话,那么全部相邻位一定 ...

  2. Django——20141014深入理解Django HttpRequest HttpResponse的类和实例

    深入理解Django HttpRequest HttpResponse的类和实例 了解META选项 了解中间件 理清所有模板传输模板变量的方式,并作出选择 Django模板系统:如何利用Django模 ...

  3. 常见的开发语言(或IT技术)一览

    Java. Android. iOS. Web前端. Python. .NET. PHP. C/C++. Linux 数据库技术

  4. android中的样式主题和国际化

    一.Android中的样式和主题     1.1样式     样式是作用在控件上的,它是一个包含一个或者多个view控件属性的集合.android style类似网页设计中的css设计思路,可以让设计 ...

  5. ibatis 动态查询

    http://www.iteye.com/topic/393042最近做了很多动态的查询,尤其是排序,以及一些状态字段,所以就做了一个总的动态查询,以不变应万变,呵呵 ibatis 里面的sql代码: ...

  6. Sonatype Nexus

    Maven 常用的仓库管理http://zh.wikipedia.org/wiki/Apache_Maven

  7. select/poll/epoll原理探究及总结

    select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作.但select ...

  8. linux socket读数据错误解释

    EINTR 表示某种阻塞的操作,被接收到的信号中断,造成的一种错误返回值. EAGAIN   从字面上来看,是提示再试一次.这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作( ...

  9. 转MQTT SERVER 性能测试报告

    硬件环境: 内存4G CPU4核 SERVER及端口: apollo端口 61619 mosquitto:端口 1884 activeMQ端口:1883 emqtt 端口1885 测试方法 并发测试: ...

  10. CSS3怎样实现超出指定文本以省略号显示效果

    作者:zhanhailiang 日期:2014-10-24 不做前端非常久了,今天从重构师那里了解到CSS3已经能够实现非常多以往必须通过JS才干实现的效果,如渐变,阴影,自己主动截断文本展示省略号等 ...