sql >> Databáze >  >> NoSQL >> MongoDB

Jak vytvořit dotaz pro aktualizaci dokumentu vnořeného pole v mongo?

Poziční operátor nefunguje na počtu úrovní, na kterých se snažíte, aby fungoval ( https://jira.mongodb.org/browse/SERVER-831?focusedCommentId=22438&page=com.atlassian.jira.plugin.system. issuetabpanels%3Acomment-tabpanel ) pomocí menus.$.items.$.name a i kdyby to udělal analyzátor dotazů MongoDB, neměl by ponětí, co ostatní $ je z find z update .

Budete muset vytáhnout položky ze schématu, aktualizovat je samostatně a poté aktualizovat kořenový dokument.

Jeden dobrý způsob, jak posoudit, kdy by se dotazy měly provádět samostatně, je myslet si, že každé menu zní jako samostatná entita (nebo tabulka v relační databázi), a proto byste pravděpodobně měli pracovat na aktualizaci těchto entit (nebo tabulek v relačním modelu) samostatně. nadřazená entita (tabulka).

Nejprve byste tedy dostali ven hlavní kořenový dokument. Procházejte nabídky na straně klienta a poté $set této konkrétní nabídky k celé položce, kterou vytvoříte na straně klienta.

Upravit

Způsob, jakým si představuji tuto stranu pracovního klienta, je (v pseudokódu, protože moje Java je trochu rezavá) tak, že nejprve získám tento dokument způsobem aktivního záznamu:

doc = db.col.find({ "_id" : { "$oid" : "506e9e54a4e8f51423679428"} , 
    "menus._id" : { "$oid" : "506e9e5aa4e8f51423679429"}});

Potom byste procházeli dokumentem a přiřazovali vaše hodnoty:

foreach(doc.menus as menu_key => menu){
    foreach(menu['items'] as key => item){
        if(item._id ==  { "$oid" : "506e9f07a4e8f5142367942f"}){
            doc.menus[menu_key][key][name] = "xcvxc66666"
        }
    }
}

A poté jednoduše uložte dokument po provedení všech změn:

db.col.save(doc);

Toto je samozřejmě jen jeden způsob, jak to udělat, a tento způsob využívá paradigma activen record, které se mi osobně líbí. V tomto nápadu byste zkombinovali nález se vším ostatním, co potřebujete v dokumentu upravit, vytvořili byste jej na straně klienta a pak vše odeslali jako jeden dotaz do vaší DB.




  1. Instalace MongoDB na Raspberry Pi

  2. Jak se připojit ke clusteru ElastiCache pomocí node.js

  3. Jak najít odpovídající záznam v mongodb?

  4. Express Node.JS - Příjem zpětného volání Redis, plnění slibů