kotcich
@kotcich
Я скучный.

Как сделать поиск по $in и $nin для одного поля в aggregate mongodb?

matchFilter := bson.D{{Key: "$match",
		Value: bson.D{{
			Key: "roommates", Value: bson.D{{
				Key: "$in", Value: []int{idInt},
				Key: "$nin", Value: []int{idInt},
			}},
		}},
	}}

Консоль выкидывает эту ошибку:
duplicate field name Key in struct literal
Я понимаю, что не верно пишу условия монго в рамках golang, вот и прощу подровнять так сказать).

В самой монге запрос вот такой:
db.messages.aggregate([
  {
    "$match": {
      "roommates": {
        "$in": [1],
        "$nin": []
      }
    }
  }
])
  • Вопрос задан
  • 57 просмотров
Решения вопроса 1
WinPooh32
@WinPooh32
Stack Overflow answer searching expert
duplicate field name Key in struct literal

Так в ошибке все написано. Вы неправильно создали структуру.

bson.D это массив из bson.E, где у bson.E есть поля Key и Value, соответственно в Го такой код должен быть:
matchFilter := bson.D{
		bson.E{
			Key: "$match",
			Value: bson.D{
				bson.E{
					Key: "roommates",
					Value: bson.D{
						bson.E{Key: "$in", Value: []int{123}},
						bson.E{Key: "$nin", Value: []int{3123}},
					},
				},
			},
		},
	}


bson.E можно опустить, поэтому в примерах непонятные {{ появляются.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы