Compare commits
2 Commits
510a126f4b
...
0ebe3a2a3a
Author | SHA1 | Date | |
---|---|---|---|
0ebe3a2a3a | |||
f56df39be8 |
11
document.go
11
document.go
@ -301,9 +301,9 @@ func (d *Document) Populate(fields ...string) {
|
|||||||
for _, field := range fields {
|
for _, field := range fields {
|
||||||
// 0 = fieldname, 1 = typename, 2 = bson name
|
// 0 = fieldname, 1 = typename, 2 = bson name
|
||||||
|
|
||||||
r, _ := readFields(field, cm)
|
r, refOk := cm.references[field]
|
||||||
|
|
||||||
if r.exists {
|
if refOk {
|
||||||
// get self
|
// get self
|
||||||
// get ptr
|
// get ptr
|
||||||
// find
|
// find
|
||||||
@ -328,8 +328,11 @@ func (d *Document) Populate(fields ...string) {
|
|||||||
asIDocument.markPopulated(field)
|
asIDocument.markPopulated(field)
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp1 = populate(r, refColl.collection, rawDoc, field, reflect.ValueOf(d.self).Interface())
|
v := reflect.ValueOf(d.self)
|
||||||
d.self = tmp1
|
tt := v.Elem().Type()
|
||||||
|
tmp1 = populate(r, refColl.collection, rawDoc, field, d.self)
|
||||||
|
nv := reflect.NewAt(tt, v.UnsafePointer())
|
||||||
|
nv.Elem().Set(reflect.ValueOf(tmp1).Elem())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
8
query.go
8
query.go
@ -611,10 +611,18 @@ func (q *Query) Exec(result interface{}) {
|
|||||||
imodel, ok := cur.Interface().(IDocument)
|
imodel, ok := cur.Interface().(IDocument)
|
||||||
if ok {
|
if ok {
|
||||||
imodel.setExists(true)
|
imodel.setExists(true)
|
||||||
|
imodel.SetSelf(imodel)
|
||||||
doc.Elem().Index(i).Set(reflect.ValueOf(imodel))
|
doc.Elem().Index(i).Set(reflect.ValueOf(imodel))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if idoc, ok := q.doc.(IDocument); ok {
|
||||||
|
idoc.SetSelf(result)
|
||||||
|
}
|
||||||
|
if rdoc, ok2 := result.(IDocument); ok2 {
|
||||||
|
rdoc.SetSelf(result)
|
||||||
|
}
|
||||||
reflect.ValueOf(result).Elem().Set(reflect.ValueOf(q.doc).Elem())
|
reflect.ValueOf(result).Elem().Set(reflect.ValueOf(q.doc).Elem())
|
||||||
q.done = true
|
q.done = true
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user