假设我们具有以下结构:
type shop struct {
ID primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty"`
Brands *brand `json:"brand,omitempty" bson:"brand,omitempty"`
}
type brand struct {
ID primitive.ObjectID `json:"_id,omitempty" bson:"deploymentid,omitempty"`
}
我尝试使用findOne()
查找文档,但是即使使用MongoDB Shell进行结果匹配也没有得到任何文档。
filter := bson.M{"brand" : bson.M{"_id" : someValue}}
var shopWithBrand shop
mycollection.findOne(ctx , filter).Decode(&shopWithBrand)
我犯了什么错误?
答案 0 :(得分:1)
此过滤器:
filter := bson.M{"brand" : bson.M{"_id" : someValue}}
告诉您要具有brand
字段的文档是嵌入式文档只有一个_id
字段,其值为someValue
。< / p>
如果您的嵌入式文档仅包含一个单独的_id
字段,但是嵌入的brand
的ID字段映射到deploymentid
,并且很可能具有其他字段,则这实际上将起作用很好(为了使示例最小化,已“删除”了),这就是为什么它不匹配的原因。
相反,您希望具有brand
字段的文档是具有匹配的deployment
字段以及其他字段的文档。这是您可以表达的方式:
filter := bson.M{"brand.deploymentid" : someValue}