sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB, lägga till nytt { field :value } i befintligt inbäddat dokument med flernivåpunktsnotation?

Det du försöker göra är inte möjligt med tanke på ditt schema. Punktnotering kan vara på flera nivåer men om det finns mer än en nivå som är en array kan den inte längre adresseras med positionsoperatorn '$'.

T.ex. du skulle behöva göra:

db.my_collection.update( 
    {'websites.blog_posts.url': 'http://www.example.com/01.html' },
    {'$set': {'websites.$.blog_posts.$.impressions': 549}},
     true );

Men att ha två positionsoperatorer i uppdateringen är inte möjligt eftersom MongoDB bara kan bestämma positionen för ett element i den första arrayen.

Ditt enda alternativ är att göra om ditt schema för att ha en dedikerad samling av användarwebbplatser (vilket är bättre av andra skäl också i det här fallet).




  1. Minska poäng i Redis eller ta bort om 0

  2. mongo + passagerare:rätt sätt att återansluta till databasen från räls? hur säkerställer man optimal mongoprestanda?

  3. Sammanfoga och formatera array av objekt i Python

  4. $vecka funktion och första veckodagen sammantaget