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
) бяха заменени.