Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O findAndModify comando é usado para modificar e retornar atomicamente um único documento. Esse comando é útil para operações que exigem ler e atualizar um documento em uma única etapa, garantindo a consistência dos dados. Casos de uso comuns incluem a implementação de contadores, filas e outras operações atômicas.
Sintaxe
A sintaxe do comando é a findAndModify seguinte:
db.collection.findAndModify({
query: <document>,
sort: <document>,
remove: <boolean>,
update: <document>,
new: <boolean>,
fields: <document>,
upsert: <boolean>
})
Parâmetros
- consulta: os critérios de seleção para o documento a ser modificado.
- classificação: Determina qual documento modificar se a consulta selecionar vários documentos.
-
remove: Se
true, remove o documento selecionado. - atualização: as modificações a serem aplicadas.
-
new: If
true, retorna o documento modificado em vez do original. - campos: limita os campos a serem retornados para o documento correspondente.
-
upsert: Se
true, criará um novo documento se nenhum documento corresponder à consulta.
Exemplos
Exemplo 1: atualizar o total de vendas
Suponha que queremos atualizar o total de vendas da loja com _id "e5767a9f-cd95-439c-9ec4-7ddc13d22926" 550000.00 e retornar o documento atualizado.
db.stores.findAndModify({
query: { "_id": "e5767a9f-cd95-439c-9ec4-7ddc13d22926" },
update: { $set: { "sales.totalSales": 550000.00 } },
new: true
})
Saída de exemplo
{
"_id": "e5767a9f-cd95-439c-9ec4-7ddc13d22926",
"name": "Marina's Eyewear Bargains",
"location": { "lat": -87.4376, "lon": 42.2928 },
"staff": { "totalStaff": { "fullTime": 20, "partTime": 6 } },
"sales": {
"totalSales": 550000,
"salesByCategory": [
{ "categoryName": "Round Sunglasses", "totalSales": 39621 },
{ "categoryName": "Reading Glasses", "totalSales": 1146 },
{ "categoryName": "Aviators", "totalSales": 9385 }
]
},
"promotionEvents": [
{
"eventName": "Incredible Discount Days",
"promotionalDates": {
"startDate": { "Year": 2024, "Month": 2, "Day": 11 },
"endDate": { "Year": 2024, "Month": 2, "Day": 18 }
},
"discounts": [
{ "categoryName": "Square Sunglasses", "discountPercentage": 16 },
{ "categoryName": "Safety Glasses", "discountPercentage": 17 },
{ "categoryName": "Wayfarers", "discountPercentage": 7 },
{ "categoryName": "Eyewear Accessories", "discountPercentage": 12 }
]
}
],
"tag": [
"#ShopLocal",
"#FashionStore",
"#SeasonalSale",
"#FreeShipping",
"#MembershipDeals"
]
}
Exemplo 2: Adicionar um novo evento promocional
Vamos adicionar um novo evento promocional chamado "Electronics Super Saver" à loja com _id_ "e5767a9f-cd95-439c-9ec4-7ddc13d22926" e retornar o documento atualizado.
db.stores.findAndModify({
query: { "_id": "e5767a9f-cd95-439c-9ec4-7ddc13d22926" },
update: { $push: { "promotionEvents": {
"eventName": "Electronics Super Saver",
"promotionalDates": {
"startDate": "2025-09-31",
"endDate": "2025-09-31"
},
"discounts": [
{
"categoryName": "Laptops",
"discountPercentage": 45
},
{
"categoryName": "Smartphones",
"discountPercentage": 25
}
]
}}},
new: true
})
Saída de exemplo
{
"_id": "e5767a9f-cd95-439c-9ec4-7ddc13d22926",
"name": "Marina's Eyewear Bargains",
"location": { "lat": -87.4376, "lon": 42.2928 },
"staff": { "totalStaff": { "fullTime": 20, "partTime": 6 } },
"sales": {
"totalSales": 550000,
"salesByCategory": [
{ "categoryName": "Round Sunglasses", "totalSales": 39621 },
{ "categoryName": "Reading Glasses", "totalSales": 1146 },
{ "categoryName": "Aviators", "totalSales": 9385 }
]
},
"promotionEvents": [
{
"eventName": "Electronics Super Saver",
"promotionalDates": { "startDate": "2025-09-31", "endDate": "2025-09-31" },
"discounts": [
{ "categoryName": "Laptops", "discountPercentage": 45 },
{ "categoryName": "Smartphones", "discountPercentage": 25 }
]
}
],
"tag": [
"#ShopLocal",
"#FashionStore",
"#SeasonalSale",
"#FreeShipping",
"#MembershipDeals"
]
}
Exemplo 3: remover um evento promocional
Suponha que queremos remover o evento promocional "Electronics Super Saver" da loja com _id "e5767a9f-cd95-439c-9ec4-7ddc13d22926" e retornar o documento original.
db.stores.findAndModify({
query: { "_id": "e5767a9f-cd95-439c-9ec4-7ddc13d22926" },
update: { $pull: { "promotionEvents": { "eventName": "Electronics Super Saver" } } },
new: true
})
Saída de exemplo
{
"_id": "e5767a9f-cd95-439c-9ec4-7ddc13d22926",
"name": "Marina's Eyewear Bargains",
"location": { "lat": -87.4376, "lon": 42.2928 },
"staff": { "totalStaff": { "fullTime": 20, "partTime": 6 } },
"sales": {
"totalSales": 550000,
"salesByCategory": [
{ "categoryName": "Round Sunglasses", "totalSales": 39621 },
{ "categoryName": "Reading Glasses", "totalSales": 1146 },
{ "categoryName": "Aviators", "totalSales": 9385 }
]
},
"promotionEvents": [
{
"eventName": "Incredible Discount Days",
"promotionalDates": {
"startDate": { "Year": 2024, "Month": 2, "Day": 11 },
"endDate": { "Year": 2024, "Month": 2, "Day": 18 }
},
"discounts": [
{ "categoryName": "Square Sunglasses", "discountPercentage": 16 },
{ "categoryName": "Safety Glasses", "discountPercentage": 17 },
{ "categoryName": "Wayfarers", "discountPercentage": 7 },
{ "categoryName": "Eyewear Accessories", "discountPercentage": 12 }
]
}
],
"tag": [
"#ShopLocal",
"#FashionStore",
"#SeasonalSale",
"#FreeShipping",
"#MembershipDeals"
]
}