sql >> Database teknologi >  >> NoSQL >> MongoDB

Upsert Array Elements matchende kriterier i et MongoDB-dokument?

Det, du har brug for, er ikke muligt ved at bruge en enkelt opdatering uden en vis logik på appsiden. Bemærk, at upsert som en funktion ikke er relevant for dette specifikke problem, medmindre du automatisk vil oprette nye widgetdokumenter, hvis der ikke findes nogen med det angivne navn.

Problemet du løber ind i er, at der ikke er nogen funktionalitet, der tillader dig at lave to forskellige opdateringer afhængigt af eksistensen af ​​et array-element. Dine eneste to muligheder er:

  1. Find varen, find ud af, om der er relevante egenskaber, kompilér en passende opdatering med dine nye eller ændrede egenskaber, og kør den. Dette kommer med den vigtige ulempe, at dette ikke er en samtidighedssikker metode. Med andre ord, hvis to webtjenester forsøger dette på samme måde, kan man overskrive hinandens ændringer.
  2. Gør widgetegenskaber til dokumenter på øverste niveau i stedet for at integrere. Giver dig mulighed for at bruge upserts til at gøre, hvad du vil. Den indlysende ulempe er, at det ikke er en særlig god mulighed med hensyn til skemadesign. Du vil ikke automatisk få alle egenskaber, hvis du f.eks. henter en widget.


  1. arrayFilters i mongodb

  2. Hvad betyder det at passe arbejdssæt ind i RAM til MongoDB?

  3. En oversigt over Multi-Document ACID-transaktioner i MongoDB og hvordan man bruger dem

  4. Hold Redis-data i live mellem docker-compose ned og op i Docker-beholderen