Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Příkaz findAndModify se používá k atomické úpravě a vrácení jednoho dokumentu. Tento příkaz je užitečný pro operace, které vyžadují čtení a aktualizaci dokumentu v jednom kroku a zajišťují konzistenci dat. Mezi běžné případy použití patří implementace čítačů, front a dalších atomických operací.
Syntaxe
Syntaxe příkazu findAndModify je následující:
db.collection.findAndModify({
query: <document>,
sort: <document>,
remove: <boolean>,
update: <document>,
new: <boolean>,
fields: <document>,
upsert: <boolean>
})
Parametry
- dotaz: Kritéria výběru pro dokument, která se mají upravit.
- sort: Určuje, který dokument se má upravit, pokud dotaz vybere více dokumentů.
-
remove: If
true, odebere vybraný dokument. - update: Změny, které se mají použít.
-
new: Pokud
true, vrátí upravený dokument místo originálu. - pole: Omezí vrácení polí pro odpovídající dokument.
-
upsert: Pokud
true, vytvoří nový dokument, pokud žádný dokument neodpovídá dotazu.
Examples
Příklad 1: Aktualizace celkového prodeje
Předpokládejme, že chceme aktualizovat celkový prodej obchodu pomocí _id "e5767a9f-cd95-439c-9ec4-7ddc13d22926" 550000.00 a vrátit aktualizovaný dokument.
db.stores.findAndModify({
query: { "_id": "e5767a9f-cd95-439c-9ec4-7ddc13d22926" },
update: { $set: { "sales.totalSales": 550000.00 } },
new: true
})
Ukázkový výstup
[mongos] StoreData> db.stores.findAndModify({
... query: { "_id": "e5767a9f-cd95-439c-9ec4-7ddc13d22926" },
... update: { $set: { "sales.totalSales": 550000.00 } },
... new: true
... })
{
_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'
]
}
Příklad 2: Přidání nové propagační události
Pojďme do obchodu přidat novou propagační akci s názvem "Electronics Super Saver" s _id_ "e5767a9f-cd95-439c-9ec4-7ddc13d22926" a vrátit aktualizovaný dokument.
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
})
Ukázkový výstup
[mongos] StoreData> 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
... })
{
_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'
]
}
Příklad 3: Odebrání propagační události
Předpokládejme, že chceme odebrat propagační akci "Electronics Super Saver" z obchodu s _id "e5767a9f-cd95-439c-9ec4-7ddc13d22926" a vrátit původní dokument.
db.stores.findAndModify({
query: { "_id": "e5767a9f-cd95-439c-9ec4-7ddc13d22926" },
update: { $pull: { "promotionEvents": { "eventName": "Electronics Super Saver" } } },
new: true
})
Ukázkový výstup
[mongos] StoreData> db.stores.findAndModify({
... query: { "_id_": "e5767a9f-cd95-439c-9ec4-7ddc13d22926" },
... update: { $pull: { "promotionEvents": { "eventName": "Electronics Super Saver" } } },
... new: true
... })
null
[mongos] StoreData> db.stores.findAndModify({
... query: { "_id": "e5767a9f-cd95-439c-9ec4-7ddc13d22926" },
... update: { $pull: { "promotionEvents": { "eventName": "Electronics Super Saver" } } },
... new: true
... })
{
_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'
]
}
Související obsah
- Kontrola možností migrace z MongoDB do Azure DocumentDB
- Další informace o kompatibilitě funkcí s MongoDB