MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MongoDB में संघ प्रदर्शन करें

इसके लिए कुछ दृष्टिकोण हैं कि आप aggregate का उपयोग कर सकते हैं के लिए विधि

db.collection.aggregate([
    // Assign an array of constants to each document
    { "$project": {
        "linkedIn": 1,
        "twitter": 1,
        "source": { "$cond": [1, ["linkedIn", "twitter"],0 ] }
    }},

    // Unwind the array
    { "$unwind": "$source" },

    // Conditionally push the fields based on the matching constant
    { "$group": { 
        "_id": "$_id",
        "data": { "$push": {
            "$cond": [
                { "$eq": [ "$source", "linkedIn" ] },
                { "source": "$source", "people": "$linkedIn.people" },
                { "source": "$source", "people": "$twitter.people" }
            ]
        }}
    }},

    // Unwind that array
    { "$unwind": "$data" },

    // Unwind the underlying people array
    { "$unwind": "$data.people" },

    // Project the required fields
    { "$project": {
        "_id": 0,
        "name": "$data.people.name",
        "source": "$data.source"
    }}
])

या MongoDB 2.6 से कुछ ऑपरेटरों का उपयोग करके एक अलग दृष्टिकोण के साथ:

db.people.aggregate([
    // Unwind the "linkedIn" people
    { "$unwind": "$linkedIn.people" },

    // Tag their source and re-group the array
    { "$group": {
        "_id": "$_id",
        "linkedIn": { "$push": {
            "name": "$linkedIn.people.name",
            "source": { "$literal": "linkedIn" }
        }},
        "twitter": { "$first": "$twitter" }
    }},

    // Unwind the "twitter" people
    { "$unwind": "$twitter.people" },

    // Tag their source and re-group the array
    { "$group": {
        "_id": "$_id",
        "linkedIn": { "$first": "$linkedIn" },
        "twitter": { "$push": {
            "name":  "$twitter.people.name",
            "source": { "$literal": "twitter" }
        }}
    }},

    // Merge the sets with "$setUnion"
    { "$project": {
        "data": { "$setUnion": [ "$twitter", "$linkedIn" ] }
    }},

    // Unwind the union array
    { "$unwind": "$data" },

    // Project the fields
    { "$project": {
        "_id": 0,
        "name": "$data.name",
        "source": "$data.source"
    }}
])

और निश्चित रूप से अगर आपको इस बात की परवाह नहीं थी कि स्रोत क्या था:

db.collection.aggregate([
    // Union the two arrays
    { "$project": {
        "data": { "$setUnion": [
            "$linkedIn.people",
            "$twitter.people"
        ]}
    }},

    // Unwind the union array
    { "$unwind": "$data" },

    // Project the fields
    { "$project": {
        "_id": 0,
        "name": "$data.name",
    }}

])


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB के मानचित्र-परिणामों की संरचना को कैसे बदलें?

  2. कुंजी नहीं होनी चाहिए। पाइमोंगो में त्रुटि

  3. मोंगो:$ सप्ताह तक समूह कैसे करें लेकिन इसके बजाय प्रत्येक सप्ताह की शुरुआत तिथि और समाप्ति तिथि लौटाएं?

  4. टेक्स्ट अन्य के लिए टेक्स्ट सर्च क्वेरी हमेशा कोई परिणाम नहीं देती है?

  5. नए क्षेत्र में एक सरणी में पहला आइटम प्रोजेक्ट करें (मोंगोडीबी एकत्रीकरण)