MongoDB 4.4 въведе девет нови оператора на конвейер за агрегиране, включително два нови оператора за намиране и замяна на подниз.
Двата нови оператора, които ви позволяват да намерите и замените подниз са $replaceOne и $replaceAll оператори.
Ето какво прави всеки оператор:
| Оператор | Описание |
|---|---|
$replaceOne | Заменя първия екземпляр на низ за търсене във входен низ със заместващ низ. |
$replaceAll | Заменя всички екземпляри на низ за търсене във входен низ със заместващ низ. |
Единствената разлика между тези оператори е, че $replaceOne замества първия екземпляр на подниза, докато $replaceAll замества всички екземпляри на подниз.
$replaceOne Оператор
Да предположим, че имаме колекция, наречена products със следния документ:
{
"_id" : 1,
"product" : "Left Handed Screwdriver with Left Handed Carry Case"
}
Можем да използваме $replaceOne оператор за замяна на първия екземпляр на подниза Left Handed с друг низ:
db.products.aggregate([
{
$project:
{
product: { $replaceOne: { input: "$product", find: "Left Handed", replacement: "Ambidextrous" } }
}
}
]).pretty() Резултат:
{
"_id" : 1,
"product" : "Ambidextrous Screwdriver with Left Handed Carry Case"
}
Забележете, че всъщност има два екземпляра на подниза (Left Handed ), но само първата инстанция беше заменена.
$replaceAll Оператор
В предишния пример заменихме първия екземпляр на подниз.
Сега нека използваме $replaceAll оператор за замяна на всички екземпляри на подниз:
db.products.aggregate([
{
$project:
{
product: { $replaceAll: { input: "$product", find: "Left Handed", replacement: "Ambidextrous" } }
}
}
]).pretty() Резултат:
{
"_id" : 1,
"product" : "Ambidextrous Screwdriver with Ambidextrous Carry Case"
}
Този път и двата екземпляра на подниза (Left Handed ) бяха заменени.