sql >> Database >  >> NoSQL >> MongoDB

Een afzonderlijke telling nodig hebben op meerdere velden die zijn samengevoegd vanuit een andere verzameling met behulp van de mongodb-aggregatiequery

Dit zou moeten lukken. Ik heb het getest op je invoerset en opzettelijk enkele dubbele waarden toegevoegd, zoals NYC verschijnen in meer dan één DESTINATION om ervoor te zorgen dat het werd ontdubbeld (d.w.z. verschillende tellingen zoals gevraagd). Voor de lol, becommentarieer alle fasen en plaats vervolgens van bovenaf UNcommentaar om het effect van elke fase van de pijplijn te zien.

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. Snijpunt van twee of meer gesorteerde sets

  2. Tijdstempel tot nu toe in php en mongodb

  3. Introductie van opzoekgrafieken in MongoDB

  4. Hoe verbinding te maken met mongoDB Atlas met behulp van mangoest