уже появились трудности. Подскажите пожалуйста, как я могу реализовать следующий запрос на Go к MongoDB:
У меня есть такие данные в MongoDB:
{
"_id": "test",
"name": "hello world",
"homes": {
"v1": {"name": "hello"},
"v2": {"name": "hello"},
"v3": {"name": "hello"},
}
}
Как мне удалить все поля из homes, кроме v1 и v2? Полей может быть много, но мне надо исключить удаление некоторых. По итогу должно получиться такое:
{
"_id": "test",
"name": "hello world",
"homes": {
"v1": {"name": "hello"},
"v2": {"name": "hello"},
}
}
Заранее благодарю!
насколько я помню, в терминах mongo это называется projection
filter := bson.M{"_id": "test"} update := bson.M{"$unset": bson.M{"homes.v3": "", "homes.v4": ""}} collection.UpdateOne(context.Background(), filter, update)
Да, но проблема в том, что таких полей homes.v{N} может быть много и руками я все их вряд ли запишу.
filter := bson.M{"_id": "test"} update := bson.M{ "$unset": bson.M{ "homes": bson.M{ "$not": bson.M{ "$in": bson.A{"v1", "v2"}, }, }, }, }
Пробовал так, но как оказалось, $unset не принимает никаких фильтров 🙃
filter := bson.M{"_id": "test"} project := bson.M{ "$project": bson.M{ "name": "$name", "homes": bson.M{ "$filter": bson.M{ "input": bson.M{"$objectToArray": "$homes"}, "as": "item", "cond": bson.M{ "$in": bson.A{"$$item.k", bson.A{"v1", "v2"}}, }, }, }, }, }
А каким образом мне сделать $unset теперь? bson.M{"$unset": "$homes"}
Обсуждают сегодня