PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

पीजी-वादे के साथ माता-पिता + बच्चों का पेड़ प्राप्त करें

मैं पीजी-वादा का लेखक हूं।

जब आपके पास 2 टेबल हों:Parent -> Child 1-से-अनेक संबंध के साथ, और आप मिलान की एक सरणी प्राप्त करना चाहते हैं Parent पंक्तियाँ, प्रत्येक पंक्ति संपत्ति के साथ विस्तारित होती है children तालिका से संबंधित पंक्तियों की एक सरणी पर सेट करें Child ...

इसे पूरा करने के कई तरीके हैं, क्योंकि सामान्य तौर पर पीजी-वादा और वादों का संयोजन बहुत लचीला होता है। यहाँ सबसे छोटा संस्करण है:

db.task(t => {
    return t.map('SELECT * FROM Parent WHERE prop1 = $1', [prop1], parent => {
        return t.any('SELECT * FROM Child WHERE parentId = $1', parent.id)
            .then(children => {
                parent.children = children;
                return parent;
            });
    }).then(a => t.batch(a))
})
    .then(data => {
        /* data = the complete tree */
    });

हम वहां यही करते हैं:

सबसे पहले, हम Parent . के लिए क्वेरी करते हैं आइटम, फिर हम प्रत्येक पंक्ति को संबंधित Child . के लिए एक क्वेरी में मैप करते हैं आइटम, जो तब अपनी पंक्तियों को Parent . में सेट करता है और उसे लौटा देता है। फिर हम Child . की सरणी को हल करने के लिए मेथड बैच का उपयोग करते हैं विधि मानचित्र से लौटाए गए प्रश्न।

ES7 के लिए अद्यतन करें

यहाँ ऊपर जैसा ही है, लेकिन ES7 async का उपयोग कर रहा है /await वाक्य रचना:

await db.task(async t => {
    const parents = await t.any('SELECT * FROM Parent WHERE prop1 = $1', [prop1]);
    for(const p of parents) {
        p.children = await t.any('SELECT * FROM Child WHERE parentId = $1', [p.id]);
    }
    return parents;
});
// the task resolves with the correct data tree

कार्य इस तरह एक सरणी के साथ हल हो जाएगा:

[
    {
        "parent1-prop1", "parent1-prop2",
        "children": [
            {"child1-prop1", "child1-prop2"},
            {"child2-prop1", "child2-prop2"}
        ]
    },
    {
        "parent2-prop1", "parent2-prop2",
        "children": [
            {"child3-prop1", "child3-prop2"},
            {"child4-prop1", "child4-prop2"}
        ]
    }    
]

एपीआई संदर्भ:नक्शा, बैच

अपडेट करें

इसका एक बेहतर उत्तर देखें:PostgreSQL/NodeJS के साथ परिणामों की सरणी के रूप में तालिका में शामिल हों।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पीजी मणि स्थापित करने का प्रयास करते समय 'libpq-fe.h शीर्षलेख नहीं मिल रहा है

  2. पोस्टग्रेज डीबी फाइलें - कौन सी फाइल विशिष्ट टेबल/इंडेक्स का प्रतिनिधित्व करती है?

  3. भारित पंक्ति संभावनाओं के साथ PostgreSQL तालिका से यादृच्छिक पंक्ति का चयन करें

  4. Postgres में बल्क इंसर्ट करने का सबसे तेज़ तरीका क्या है?

  5. PostgreSQL डेटाबेस बनाएँ