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.