1
mgoを使用してサブ文書を選択したいとします。 選択する前に、クエリは正しい最上位レベルのドキュメントを照会する必要があります。文書の照会とサブ文書の選択
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"`
}
それは、空の財布の文書を返します。
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)
これらの構造体は次のとおりです。 私はこれを試してみました。
はどうもありがとうございました。財布を受け取る方法はありますか?たぶんsth。ウォレットのコレクションを追加して、Userに外部キーを設定するのと同じですか? – nayD93
@ nayD93上記のクエリは、ユーザーにラップされたウォレット(およびユーザーID)のみを取得します。これが気にさえすれば、返されたデータを投影することができる場所で[集約フレームワーク](https://docs.mongodb.com/manual/aggregation/)を使うことができます。そして、ウォレットだけを取り出して、ユーザーIDなし。 ['Collection.Pipe()'](https://godoc.org/gopkg.in/mgo.v2#Collection.Pipe)を出発点として参照してください。 – icza
@ nayD93もちろん、ウォレットを独自のコレクションに分割し、クエリも実行可能なオプションです。 – icza