Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De findAndModify opdracht wordt gebruikt om één document atomisch te wijzigen en te retourneren. Deze opdracht is handig voor bewerkingen die in één stap een document moeten lezen en bijwerken, waardoor gegevensconsistentie wordt gegarandeerd. Veelvoorkomende gebruiksvoorbeelden zijn het implementeren van tellers, wachtrijen en andere atomische bewerkingen.
Syntaxis
De syntaxis voor de findAndModify opdracht is als volgt:
db.collection.findAndModify({
query: <document>,
sort: <document>,
remove: <boolean>,
update: <document>,
new: <boolean>,
fields: <document>,
upsert: <boolean>
})
Parameterwaarden
- query: de selectiecriteria voor het document dat moet worden gewijzigd.
- sort: bepaalt welk document moet worden gewijzigd als de query meerdere documenten selecteert.
-
verwijderen: Als
true, verwijdert u het geselecteerde document. - update: De wijzigingen die moeten worden toegepast.
-
nieuw: Als
true, retourneert het gewijzigde document in plaats van het origineel. - velden: hiermee beperkt u de velden die moeten worden geretourneerd voor het overeenkomende document.
-
upsert: Als
true, maakt u een nieuw document als er geen document overeenkomt met de query.
Voorbeelden
Voorbeeld 1: Totale verkoop bijwerken
Stel dat we de totale verkoop voor de winkel willen bijwerken met _id 'e5767a9f-cd95-439c-9ec4-7ddc13d22926' om het bijgewerkte document te 550000.00 retourneren.
db.stores.findAndModify({
query: { "_id": "e5767a9f-cd95-439c-9ec4-7ddc13d22926" },
update: { $set: { "sales.totalSales": 550000.00 } },
new: true
})
Voorbeelduitvoer
[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'
]
}
Voorbeeld 2: Een nieuwe promotie-gebeurtenis toevoegen
Laten we een nieuwe promotiegebeurtenis genaamd "Electronics Super Saver" toevoegen aan de winkel met _id_ e5767a9f-cd95-439c-9ec4-7ddc13d22926" en het bijgewerkte document retourneren.
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
})
Voorbeelduitvoer
[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'
]
}
Voorbeeld 3: Een promotieevenement verwijderen
Stel dat we het promotieevenement "Electronics Super Saver" uit de winkel willen verwijderen met _id "e5767a9f-cd95-439c-9ec4-7ddc13d22926" en het oorspronkelijke document retourneren.
db.stores.findAndModify({
query: { "_id": "e5767a9f-cd95-439c-9ec4-7ddc13d22926" },
update: { $pull: { "promotionEvents": { "eventName": "Electronics Super Saver" } } },
new: true
})
Voorbeelduitvoer
[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'
]
}
Verwante inhoud
- Bekijk de opties voor migreren van MongoDB naar Azure DocumentDB
- Meer informatie over functiecompatibiliteit met MongoDB