2011-12-27 35 views
1

我是新來的MongoDB,我有以下問題:Grails的MongoDB的指數嵌入式字符串列表

class Venue { 

String name 
List<String> tags 

    static mapWith = "mongo" 

static mapping = { 
    tags index:true  
} 


new Venue(name: 'Test1', tags:['abc', 'def']).save() 
new Venue(name: 'Test2', tags:['abc', 'ghi']).save() 

現在我想查詢與特定的標籤場地。

def venues = Venue.getByTag(['def']); 

不幸的是,查詢不起作用。有更好的方法嗎?

現在我知道如何與一個特定的標籤獲得場地: 高清場館= {Venue.withCriteria EQ 「標籤」,「高清」 }

我怎樣才能發現是否該指數將使用?

+1

會發生什麼,如果你查詢中使用getByTags(複數)?您是否通過從shell中查詢數據來確認數據實際上是在Mongo中? – Ryan 2011-12-27 17:35:45

+0

我得到以下異常: groovy.lang.MissingMethodException:沒有方法的簽名:com.foo.Venue.getByTag()適用於參數類型:(java.util.ArrayList)values:[[def]] 可能解決方案:getTags(),setTags(java.util.List) 消息:groovy.lang.MissingMethodException:方法沒有簽名:com.foo.Venue.getByTag()適用於參數類型:(java.util.ArrayList)值:[[def]] 可能的解決方案:getTags(),setTags(java.util.List) 我認爲這將是一個很大的優勢,使用MongoDB,如果我可以索引標籤,而不必做一個域OBJ。收集標籤。 – user1117605 2011-12-28 13:38:12

+0

我真的不知道GORM,但我猜你讀過這個文檔? http://grails.org/doc/1.0.x/guide/5.%20Object%20Relational%20Mapping%20(GORM).html MongoDB絕對支持你正在嘗試做的事情,並且我認爲GORM也是如此,它是隻是找到語法的問題。 – Ryan 2011-12-28 14:35:39

回答

1

Dynamic finders以「find」開始,而不是「get」。

所以你寫對子級類似:

def venues = Venue.findAllByTag("def"); 
相關問題