查询文档和 select 个子文档
Query document and select subdocument
我想 select 使用 mgo 的子文档。
在 select 之前,查询应该查询正确的顶级文档。
我试过这个:
name := "anything"
w := models.Wallet{}
c := s.DB("ep2").C("users")
err := c.Find(bson.M{"name": name}).Select(bson.M{"wallet": 1}).One(&w)
这些是结构:
type User struct {
Id bson.ObjectId `bson:"_id,omitempty" json:"-" form:"-"`
Wallet Wallet `bson:"wallet,omitempty" json:"wallet,omitempty" form:"wallet,omitempty"`
}
type Wallet struct {
Taddr string `json:"taddr,omitempty" form:"taddr,omitempty"`
TaddrPriv string `json:"-" form:"-"`
Tbalance float64 `json:"tbalance" form:"tbalance,omitempty"`
}
它returns一个空的钱包文件。
使用 Query.Select()
您可以指定要检索的查询文档的哪些字段,但检索到的实体 不会是所选字段的值,它们仍然是查询文档的值!
因此,由于您正在查询 "users"
集合,因此您应该将 *User
的值传递给 Query.One()
:
name := "anything"
u := models.User{}
c := s.DB("ep2").C("users")
err := c.Find(bson.M{"name": name}).Select(bson.M{"wallet": 1}).One(&u)
if err != nil {
// Handle error
return
}
// Wallet is in u.Wallet
fmt.Printf("Result wallet: %+v", u.Wallet)
我想 select 使用 mgo 的子文档。 在 select 之前,查询应该查询正确的顶级文档。 我试过这个:
name := "anything"
w := models.Wallet{}
c := s.DB("ep2").C("users")
err := c.Find(bson.M{"name": name}).Select(bson.M{"wallet": 1}).One(&w)
这些是结构:
type User struct {
Id bson.ObjectId `bson:"_id,omitempty" json:"-" form:"-"`
Wallet Wallet `bson:"wallet,omitempty" json:"wallet,omitempty" form:"wallet,omitempty"`
}
type Wallet struct {
Taddr string `json:"taddr,omitempty" form:"taddr,omitempty"`
TaddrPriv string `json:"-" form:"-"`
Tbalance float64 `json:"tbalance" form:"tbalance,omitempty"`
}
它returns一个空的钱包文件。
使用 Query.Select()
您可以指定要检索的查询文档的哪些字段,但检索到的实体 不会是所选字段的值,它们仍然是查询文档的值!
因此,由于您正在查询 "users"
集合,因此您应该将 *User
的值传递给 Query.One()
:
name := "anything"
u := models.User{}
c := s.DB("ep2").C("users")
err := c.Find(bson.M{"name": name}).Select(bson.M{"wallet": 1}).One(&u)
if err != nil {
// Handle error
return
}
// Wallet is in u.Wallet
fmt.Printf("Result wallet: %+v", u.Wallet)