MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Perlu hitungan berbeda pada beberapa bidang yang digabungkan dari koleksi lain menggunakan kueri agregasi mongodb

Ini harus melakukan trik. Saya mengujinya pada set input Anda dan dengan sengaja menambahkan beberapa nilai penipuan seperti NYC muncul di lebih dari satu DESTINATION untuk memastikan itu tidak ditipu (yaitu jumlah yang berbeda seperti yang diminta). Untuk bersenang-senang, komentari semua tahapan, lalu hapus komentar dari atas ke bawah untuk melihat efek dari setiap tahapan alur.

var id = "1";

c=db.foo.aggregate([
// Find a thing:
{$match: {"_id" : id}}

// Do the lookup into the objects collection:
,{$lookup: {"from" : "foo2",
            "localField" : "objectsIds",
            "foreignField" : "_id",
            "as" : "objectResults"}}

// OK, so we've got a bunch of extra material now.  Let's
// get down to just the metaDataMap:
,{$project: {x: "$objectResults.metaDataMap"}}
,{$unwind: "$x"}
,{$project: {"_id":0}}

// Use $objectToArray to get all the field names dynamically:
// Replace the old x with new x (don't need the old one):
,{$project: {x: {$objectToArray: "$x"}}}
,{$unwind: "$x"}

// Collect unique field names.  Interesting note: the values
// here are ARRAYS, not scalars, so $push is creating an
// array of arrays:
,{$group: {_id: "$x.k", tmp: {$push: "$x.v"}}}

// Almost there!  We have to turn the array of array (of string)
// into a single array which we'll subsequently dedupe.  We will
// overwrite the old tmp with a new one, too:
,{$addFields: {tmp: {$reduce:{
    input: "$tmp",
    initialValue:[],
    in:{$concatArrays: [ "$$value", "$$this"]}
        }}
    }}

// Now just unwind and regroup using the addToSet operator
// to dedupe the list:
,{$unwind: "$tmp"}
,{$group: {_id: "$_id", uniqueVals: {$addToSet: "$tmp"}}}

// Add size for good measure:
,{$addFields: {size: {"$size":"$uniqueVals"}} }
          ]);


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara mendapatkan dokumen tertanam tertentu di dalam koleksi MongoDB?

  2. Bagaimana cara mengatur database MongoDB di Heroku dengan MongoLab?

  3. Bagaimana cara membuat Dokumen Bson dengan nilai Null menggunakan driver resmi C #?

  4. Menampilkan Gambar di Angular.js dari MongoDB

  5. Bagaimana cara mengindeks dua array di MongoDB?