Массовое удаление специального письма в коллекции - PullRequest
1 голос
/ 16 марта 2020

Отредактировано:

Допустим, у меня есть база данных Mon go с коллекцией, назовем ее продуктами. В этой коллекции я хочу удалить все специальные символы, скажем, все точки, из всех записей в определенном поле, скажем, цену. Кроме того, как мне заменить, например, информационные записи всех моих объектов?

Как мне это сделать через оболочку mon go?

Example:

_id: 123324erwerew
name: 'moisture cream'
price: 30.00
info: 'Good Cream'

_id: 343324erwerew
name: 'moisture cream two'
price: 40.00
info: 'Good Cream also'

Позволяет сказать информацию в обоих из них должно быть: «лучший крем за всю историю» и точки должны исчезнуть по обеим ценам

1 Ответ

0 голосов
/ 16 марта 2020

, если ваши цены были как 30.11 и 40.11, следующая команда обновления конвейера установит цены "3011" и "4011", а также установит для best cream ever

db.products.updateMany({}, [
    {
        $set: {
            price: {
                $reduce: {
                    input: { $split: [{ $toString: "$price" }, "."] },
                    initialValue: "",
                    in: { $concat: ["$$value", "$$this"] }
                }
            }
        }
    },
    {
        $set: {
            info: "best cream ever"
        }
    }
])

объяснение об обновлении цены:

  1. значение цены преобразуется в строку
  2. результирующая строка разделяется на разделитель .
  3. , затем результирующие части объединяются обратно в строка с использованием $ lower

в mongodb v4.4 это значительно упрощается с помощью оператора $ replaceOne

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...