2014-02-15 8 views
2

revel 및 mgo로 작은 프로젝트 (연습)를하고 있지만 쿼리를 작성할 때 검색 기능에 문제가 있습니다. 코드는 다음과 같다 :mgo 쿼리를 작성하는 방법은 무엇입니까?

conditions := make(bson.M, 0) 
conditions["status"] = bson.M{"$ne": "delete"} 

if item, ok := paramsPost["title"]; ok { 
    if item[0] != "" { 
     conditions["title"] = bson.RegEx{Pattern: item[0]} 
    } 
} 
if item, ok := paramsPost["from_date"]; ok { 
    if item[0] != "" { 
     conditions["publishdate"] = bson.M{} 
     fromDate, _ := time.Parse("2006-01-02", item[0]) 
     conditions["publishdate"]["$gte"] = fromDate.Unix() 
    } 
} 

if item, ok := paramsPost["to_date"]; ok { 
    if _, ok := conditions["publishdate"]; !ok { 
     conditions["publishdate"] = bson.M{} 
    } 
    if item[0] != "" { 
     toDate, _ := time.Parse("2006-01-02", item[0]) 
     conditions["publishdate"]["$lte"] = toDate.Unix() 
    } 
} 

그리고 일부 오류 정보를 가지고 :

invalid operation: conditions["publishdate"]["$gte"] (index of type interface {}) 

내가 뭔가 잘못하게 알고,하지만 난 어떻게 해결하는 이유를 알고하지 않습니다. 아무도 나 도와 줄 수 없어? 감사합니다

답변

4

bson.M지도에 publishdate을 찾을 때 당신은 bson.Minterface{}에서 유형의 주장을 할 필요가

conditions["publishdate"]["$gte"] = fromDate.Unix() 

에, 그래서 map[string]interface{} (http://godoc.org/labix.org/v2/mgo/bson#M)

입니다.

대신 불필요한지도 조회에 저장하고 주장을 입력

publishdate:= bson.M{} 
// ... your logic goes here 
conditions["publishdate"] = publishDate 

처럼 뭔가에 코드를 리팩토링 할 수있다.

+0

대단히 감사합니다 ~ 알렉스, 지금 작동하게합니다. PHP 구조로 golang 구조체를 처리하는 것처럼 보입니다 ~ 하하. 정말 많이 도와 줘요. – Vincent

관련 문제