查询文档并选择子文档

时间:2017-06-15 19:13:46

标签: select go mgo subdocument

我想使用mgo选择一个子文档。 在选择之前,查询应该查询正确的顶级文档。 我试过这个:

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"`
}

它会返回一个空的钱包文档。

1 个答案:

答案 0 :(得分:0)

使用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)