GORM for MongoDB:全新里程碑,更豐富的體驗

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

去年,我們推出了 GORM 對 MongoDB 的支援 (以及許多其他 GORM 實作),並受到社群的極大歡迎。我們收到了大量的回饋,今天我們很高興宣布新的發行版本 (Milestone 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']

還有許多其他改進,包括自訂索引建立的能力、對範例查詢的支援以及對 GORM API 更完整的支援。文件已更新,涵蓋了所有這些新功能。請告訴我們您的想法,您的回饋非常寶貴。

最後一個推廣,如果您在馬德里地區並且想了解更多關於 GORM for MongoDB 的資訊,請在本週四來參加 Spring IO 會議,屆時將會有更多關於 Spring、Grails 和 GORM 的講座。

取得 Spring 電子報

隨時掌握 Spring 電子報的最新資訊

訂閱

領先一步

VMware 提供培訓和認證,以加速您的進展。

深入了解

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔案。

深入了解

即將到來的活動

查看 Spring 社群中所有即將到來的活動。

檢視全部