0

假设我们有以下结构:

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 查找一个文档,但即使有结果匹配,我也没有得到任何文档。

filter := bson.M{"brand" : bson.M{"_id" : someValue}}
var shopWithBrand shop
mycollection.findOne(ctx , filter).Decode(&shopWithBrand)

我犯了什么错误?

4

1 回答 1

1

这个过滤器:

filter := bson.M{"brand" : bson.M{"_id" : someValue}}

告诉您需要具有一个字段的文档,该字段是具有单个字段brand的嵌入文档,该字段的值是._idsomeValue

如果您的嵌入式文档仅包含这个单个_id字段,这实际上会起作用,但是您的嵌入式文档brand有这个 ID 字段映射到deploymentid并且很可能还有其他字段(您“剥离”以最小化示例),这就是为什么它不会匹配。

相反,您希望具有字段的文档是在其他字段brand中具有匹配deployment字段的文档。你可以这样表达:

filter := bson.M{"brand.deploymentid" : someValue}
于 2019-07-08T11:25:30.783 回答