Как правильно написать вложенный bson.M {} - PullRequest
0 голосов
/ 08 июля 2019

Предположим, у нас есть следующая структура:

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)

Какую ошибку я совершил?

1 Ответ

1 голос
/ 08 июля 2019

Этот фильтр:

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

Сообщает, что вы хотите документы с полем brand, являющимся внедренным документом , имеющим одно поле _id , значение которого равно значениюsomeValue.

Это на самом деле будет работать, если ваши встроенные документы будут состоять только из этого единственного поля _id, а для встроенного brand это поле идентификатора будет сопоставлено с deploymentid и, скорее всего, имеет другие поляа также (который вы «удалили», чтобы свести пример к минимуму), и поэтому он не будет совпадать.

Вместо этого вы хотите, чтобы документы с полем brand были документом с соответствующим deployment поле среди других полей .Вот как вы можете выразить это:

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