GORM for MongoDB:全新里程碑,更丰富的体验

工程 | Graeme Rocher | 2011 年 2 月 15 日 | ...

去年,我们在 GORM 中引入了对 MongoDB 的支持(以及许多其他 GORM 实现),并受到了社区的广泛好评。我们收到了大量的反馈,今天我们很高兴地宣布一个新的版本(里程碑 2),它解决了我们收到的一些反馈。

嵌入式文档支持

需求排名第一的功能是嵌套文档支持,在此版本中,我们对此进行了重大改进。现在,您可以使用 GORM 中的标准嵌入式映射来嵌入其他域

class Person {
  String firstName
  String lastName
  Address address
  static embedded = ['address']
}

嵌入式域存储在主 Mongo 文档中的嵌套文档中。此外,基本类型的列表和映射现在也可以持久化到本机 Mongo ArrayList 和哈希中

class Person {
	List<String> friends
	Map pets
}
...

new Person(friends:['Fred', 'Bob'], pets:[chuck:"Dog", eddie:'Parrot']).save(flush:true)

嵌入式域以及列表和映射都存储在域的主 Mongo 文档中,从而允许使用 GORM 实现更多常见的 MongoDB 模式。

地理空间索引和查询

MongoDB 本身支持地理空间索引和查询,现在 GORM for MongoDB 也支持此功能。您可以将列表或映射定义为“地理索引”

class Hotel {
	String name
	List location
	static mapping = {
		location geoIndex:true
	}
}

然后,可以使用表示纬度和经度的二维列表轻松地持久化地理数据

new Hotel(name:"Hilton", location:[50, 50]).save()

或者,您可以使用包含纬度和经度值的映射,这可能更易于阅读

new Hotel(name:"Hilton", location:[lat: 40.739037, long: 73.992964]).save()

持久化后,可以使用新的 findBy*Near 语法查询域类

def h = Hotel.findByLocationNear([50, 60])
assert h.name == 'Hilton'

您还可以使用绑定查询,使用 findBy*WithinBox 方法在矩形内定位位置

def box = [[40.73083, -73.99756], [40.741404,  -73.988135]]
def h = Hotel.findByLocationWithinBox(box)

或使用 findBy*WithinCircle 方法在圆内定位

def center = [50, 50]
def radius = 10
def h = Hotel.findByLocationWithinCircle([center, radius])

无模式域模型

MongoDB 是完全无模式的,这意味着您不受限于关系数据库中固定数量的列。 GORM for MongoDB 现在支持无模式域模型。您可以继续在您的域模型中指定您的固定域属性

class Plant {
    boolean goesInPatch
    String name
}

但是,您现在也可以使用 Groovy 下标运算符来持久化其他属性

def p = new Plant(name:"Pineapple")
p['color'] = 'Yellow'
p['hasLeaves'] = true
p.save()
p = Plant.findByName("Pineapple")

println p['color']
println p['hasLeaves']

还有许多改进,包括自定义索引创建的能力,对 query-by-example 的支持以及对 GORM API 的更完整支持。该文档已更新,涵盖了所有这些新功能。让我们知道您的想法,您的反馈非常宝贵。

最后,如果您在马德里地区并且想了解更多关于 GORM for MongoDB 的信息,请在本周四参加Spring IO 会议,那里将有更多关于 Spring、Grails 和 GORM 的演讲。

获取 Spring 新闻通讯

与 Spring 新闻通讯保持联系

订阅

抢占先机

VMware 提供培训和认证,以加速您的进步。

了解更多

获取支持

Tanzu Spring 在一个简单的订阅中提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部