diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..723ef36 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea \ No newline at end of file diff --git a/minquery.go b/minquery.go index 651932f..9af955b 100644 --- a/minquery.go +++ b/minquery.go @@ -4,6 +4,8 @@ package minquery import ( "errors" + "strconv" + "strings" "github.com/globalsign/mgo" "github.com/globalsign/mgo/bson" @@ -202,8 +204,9 @@ func (mq *minQuery) All(result interface{}, cursorFields ...string) (cursor stri return } cursorData := make(bson.D, len(cursorFields)) - for i, cf := range cursorFields { - cursorData[i] = bson.DocElem{Name: cf, Value: doc[cf]} + err = mq.getCursorData(cursorFields, cursorData, doc) + if err != nil { + return } cursor, err = mq.cursorCodec.CreateCursor(cursorData) if err != nil { @@ -221,3 +224,30 @@ func (mq *minQuery) All(result interface{}, cursorFields ...string) (cursor stri err = mq.db.C(mq.coll).NewIter(nil, firstBatch, 0, nil).All(result) return } + +func (mq *minQuery) getCursorData(cursorFields []string, cursorData bson.D, doc bson.M) error { + for i, cf := range cursorFields { + cfs := strings.Split(cf, ".") + if len(cfs) <= 1 { + cursorData[i] = bson.DocElem{Name: cf, Value: doc[cf]} + continue + } + leafM := doc[cfs[0]] + for j:=1; j