MongoDB 4.4 wprowadził dziewięć nowych operatorów potoku agregacji, w tym dwa nowe operatory do znajdowania i zastępowania podciągu.
Dwa nowe operatory, które pozwalają znaleźć i zamienić podciąg to $replaceOne i $replaceAll operatorów.
Oto, co robi każdy operator:
| Operator | Opis |
|---|---|
$replaceOne | Zastępuje pierwsze wystąpienie ciągu wyszukiwania w ciągu wejściowym ciągiem zastępczym. |
$replaceAll | Zastępuje wszystkie wystąpienia ciągu wyszukiwania w ciągu wejściowym ciągiem zastępczym. |
Jedyna różnica między tymi operatorami polega na tym, że $replaceOne zastępuje pierwszy wystąpienie podciągu, podczas gdy $replaceAll zastępuje wszystkie wystąpienia podciągu.
$replaceOne Operator
Załóżmy, że mamy kolekcję o nazwie products z następującym dokumentem:
{
"_id" : 1,
"product" : "Left Handed Screwdriver with Left Handed Carry Case"
}
Możemy użyć $replaceOne operator zastępujący pierwsze wystąpienie podciągu Left Handed z innym ciągiem:
db.products.aggregate([
{
$project:
{
product: { $replaceOne: { input: "$product", find: "Left Handed", replacement: "Ambidextrous" } }
}
}
]).pretty() Wynik:
{
"_id" : 1,
"product" : "Ambidextrous Screwdriver with Left Handed Carry Case"
}
Zauważ, że w rzeczywistości istnieją dwie instancje podciągu (Left Handed ), ale tylko pierwsza instancja została zastąpiona.
$replaceAll Operator
W poprzednim przykładzie zastąpiliśmy pierwsze wystąpienie podciągu.
Teraz użyjmy $replaceAll operator do zastąpienia wszystkich instancje podciągu:
db.products.aggregate([
{
$project:
{
product: { $replaceAll: { input: "$product", find: "Left Handed", replacement: "Ambidextrous" } }
}
}
]).pretty() Wynik:
{
"_id" : 1,
"product" : "Ambidextrous Screwdriver with Ambidextrous Carry Case"
}
Tym razem obie instancje podciągu (Left Handed ) zostały zastąpione.