假设我们具有以下结构:
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)
我犯了什么错误?
最佳答案
此过滤器:
filter := bson.M{"brand" : bson.M{"_id" : someValue}}
告诉您想要具有
brand
字段的文档,该字段是嵌入式文档,具有单个_id
字段,其值为someValue
的值。如果您的嵌入式文档仅包含单个
_id
字段,但是嵌入的brand
将此ID字段映射到deploymentid
,并且很可能还有其他字段(您将其“剔除”以使示例最小化),则实际上这将起作用这就是为什么它不匹配的原因。相反,您希望具有
brand
字段的文档是在其他字段中具有匹配的deployment
字段的文档。这是您可以表达的方式:filter := bson.M{"brand.deploymentid" : someValue}
关于mongodb - 如何正确编写嵌套的bson.M {},我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56933823/