У меня есть коллекция со следующей структурой в MongoDB:
{
"userId": String,
"refs": Set<String>
}
Мне нужно обновить коллекции этими документами. Я хочу добавить к refs
новую строку для пользователей, которые находятся в фильтре $in
. Но, если пользователь не существует, мне нужно его "отшить".
В коде (golang) это выглядит так:
filter := bson.M{
"userId": bson.M{
"$in:": tokens // tokens is []string
}
}
update := bson.M{
"$addToSet": bson.M{
"refs": newReference
}
}
ctx, _ := newDbOperationContext()
_, err := driver.UpdateMany(ctx, filter, update)
Итак, для существующих пользователей это работает ок, ссылка добавлена. Но для пользователей, которых не существует, ничего не происходит.
Я установил в driver.UpdateMany(bson, bson, opts...)
опцию options.UpdateOptions.SetUpsert(true)"
, но в результате я получил документ без userId:
{
"_id": ObjectId("..."),
"refs": ["new_reference"]
}
Итак, у меня вопрос, как сохранить новые значения с помощью поля userId
.
Масштаб равен 2 * 10 ^ 6 пользователям для обновления, поэтому я хотел бы сделать это с помощью пакетного запроса. Я думаю, что создавать с использованием «один за другим» и обновлять его здесь не вариант.
Спасибо за вашу поддержку!