Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Select 查询文档并选择子文档_Select_Go_Mgo_Subdocument - Fatal编程技术网

Select 查询文档并选择子文档

Select 查询文档并选择子文档,select,go,mgo,subdocument,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,om

我想使用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"`
}
它返回一个空钱包文档。

您可以指定要检索查询文档的哪些字段,但检索到的实体将不是所选字段的值,它们仍然是查询文档的值

因此,由于您正在查询
“用户”
集合,因此应将
*User
的值传递给:

使用,您可以指定要检索查询文档的哪些字段,但检索到的实体将不是所选字段的值,它们仍然是查询文档的值

因此,由于您正在查询
“用户”
集合,因此应将
*User
的值传递给:


非常感谢你。有没有办法只收钱包?可能是添加钱包收藏并为用户设置外键?@nayD93上述查询仅检索包裹在用户中的钱包(加上用户id)。即使这样,如果您感到不安,您也可以在可以投影返回数据的位置使用,然后您可以只检索未包装的钱包,而不检索用户id。请参阅作为起点。@nayD93,当然,将钱包拆分为自己的集合并查询也是一个可行的选择。非常感谢。有没有办法只收钱包?可能是添加钱包收藏并为用户设置外键?@nayD93上述查询仅检索包裹在用户中的钱包(加上用户id)。即使这让您感到困扰,您也可以在可以投影返回数据的地方使用,然后您可以只检索未包装的钱包,而不检索用户id。请参阅作为起点。@nayD93,当然,将钱包拆分为自己的集合并查询也是一个可行的选择。
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)