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

MongoDB पर एकत्रीकरण/सेट चौराहा निष्पादित करें

यह कुछ हद तक शामिल समाधान है। विचार यह है कि पहले संभावित जोड़े की आबादी प्राप्त करने के लिए डीबी का उपयोग करें, फिर चारों ओर घूमें और डीबी को _user में जोड़े खोजने के लिए कहें। खेत। सावधान रहें कि हजारों उपयोगकर्ता एक बहुत बड़ी जोड़ी सूची बनाएंगे। हम $addFields . का उपयोग करते हैं उदाहरण के लिए जितना हम देखते हैं, उससे कहीं अधिक इनपुट रिकॉर्ड के मामले में, लेकिन यदि नहीं, तो दक्षता के लिए $project से बदलें पाइप के माध्यम से बहने वाली सामग्री की मात्रा में कटौती करने के लिए।

//
// Stage 1:  Get unique set of username pairs.
//
c=db.foo.aggregate([
{$unwind: "$_user"}

// Create single deduped list of users:
,{$group: {_id:null, u: {$addToSet: "$_user"} }}

// Nice little double map here creates the pairs, effectively doing this:
//    for index in range(0, len(list)):
//      first = list[index]
//      for p2 in range(index+1, len(list)):
//        pairs.append([first,list[p2]])
// 
,{$addFields: {u: 
  {$map: {
    input: {$range:[0,{$size:"$u"}]},
    as: "z",
    in: {
        $map: {
            input: {$range:[{$add:[1,"$$z"]},{$size:"$u"}]},
            as: "z2",
            in: [
            {$arrayElemAt:["$u","$$z"]},
            {$arrayElemAt:["$u","$$z2"]}
            ]
        }
    }
    }}
}}

// Turn the array of array of pairs in to a nice single array of pairs:
,{$addFields: {u: {$reduce:{
        input: "$u",
        initialValue:[],
        in:{$concatArrays: [ "$$value", "$$this"]}
        }}
    }}
          ]);


// Stage 2:  Find pairs and tally up the fileids

doc = c.next(); // Get single output from Stage 1 above.                       

u = doc['u'];

c2=db.foo.aggregate([
{$addFields: {_x: {$map: {
                input: u,
                as: "z",
                in: {
                    n: "$$z",
                    q: {$setIsSubset: [ "$$z", "$_user" ]}
                }
            }
        }
    }}
,{$unwind: "$_x"}
,{$match: {"_x.q": true}}
//  Nice use of grouping by an ARRAY here:
,{$group: {_id: "$_x.n", v: {$push: "$_id.fileid"}, n: {$sum:1} }}
,{$match: {"n": {"$gt":1}}}
                     ]);

show(c2);



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb में समानांतर सरणियों को अनुक्रमित करना

  2. Mongodb एक क्वेरी में उपनाम बना रहा है

  3. Node.js और Mongoose का उपयोग करके छवियों को संग्रहीत करने के लिए GridFS का उपयोग कैसे करें

  4. कनेक्ट होने के बाद mongobee द्वारा एटलस क्लस्टर पर DBname.system.indexes को पढ़ना विफल रहा

  5. 2dsphere इंडेक्स बनाते समय MongoDB में "देशांतर/अक्षांश सीमा से बाहर है" को ठीक करें