| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | 
							- package ii
 
- import (
 
- 	"strings"
 
- 	"golib/features/mo"
 
- )
 
- func (f *FieldInfo) HasLookup(asName string) (*Lookup, bool) {
 
- 	for _, l := range f.Lookup {
 
- 		if l.AS == asName && l.From != "" && l.ForeignField != "" {
 
- 			return &l, true
 
- 		}
 
- 	}
 
- 	return nil, false
 
- }
 
- func (f *FieldInfo) HasSet(name string) bool {
 
- 	for _, s := range f.Set {
 
- 		if s.Name == name && s.OP != "" {
 
- 			return true
 
- 		}
 
- 	}
 
- 	return false
 
- }
 
- // ArgLookup 将 FieldInfo.Lookup 转化为 mo.Looker 接口
 
- func (f *FieldInfo) ArgLookup(lookup *Lookup) *mo.Looker {
 
- 	l := new(mo.Looker)
 
- 	l.SetFrom(lookup.From)
 
- 	l.SetLocalField(f.Name)
 
- 	l.SetForeignField(lookup.ForeignField)
 
- 	l.SetAs(lookup.AS)
 
- 	pipe := mo.Pipeline{}
 
- 	if len(f.Fields) > 0 {
 
- 		p := mo.Projecter{}
 
- 		for _, field := range f.Fields {
 
- 			p.AddEnable(field.Name)
 
- 		}
 
- 		pipe = append(pipe, p.Pipeline())
 
- 	}
 
- 	if lookup.SUM != "" {
 
- 		group := mo.Grouper{}
 
- 		group.Add("_id", nil)
 
- 		group.Add(lookup.SUM, mo.D{{Key: mo.PoSum, Value: "$" + lookup.SUM}})
 
- 		pipe = append(pipe, group.Pipeline())
 
- 	}
 
- 	if !lookup.List {
 
- 		pipe = append(pipe, mo.NewLimiter(1).Pipeline())
 
- 	}
 
- 	l.SetPipe(pipe)
 
- 	return l
 
- }
 
- // ArgSet 为查询结果新增字段
 
- func (f *FieldInfo) ArgSet() *mo.Setter {
 
- 	sets := new(mo.Setter)
 
- 	for _, set := range f.Set {
 
- 		switch set.OP {
 
- 		case mo.PoSum:
 
- 			sets.SUM(set.Name, strings.Split(set.Value, ","))
 
- 		}
 
- 	}
 
- 	return sets
 
- }
 
 
  |