π©Unwind
Array deconstruction
{
"_id" : ObjectId("5e9afcd20f86e454c4518d8d"),
"name" : "Margarett Lind",
"age" : 59,
"activities" : [
"Golf",
"Photography",
"Hacking"
]
}// $unwind on activities
db.trips.aggregate()
.unwind("$activities")
// for each activity produces one document
/* 1 */
{
"_id" : ObjectId("5e9afcd20f86e454c4518d8d"),
"name" : "Margarett Lind",
"age" : 59,
"activities" : "Golf"
},
/* 2 */
{
"_id" : ObjectId("5e9afcd20f86e454c4518d8d"),
"name" : "Margarett Lind",
"age" : 59,
"activities" : "Photography"
},
/* 3 */
{
"_id" : ObjectId("5e9afcd20f86e454c4518d8d"),
"name" : "Margarett Lind",
"age" : 59,
"activities" : "Hacking"
}var travelersQueryableCollection = tripsDatabase
.GetCollection<Traveler>(Constants.TravelersCollection)
.AsQueryable();
var linqQuery = travelersQueryableCollection
.SelectMany(t => t.Activities, (t, a) => new
{
age = t.Age,
activity = a
})
.GroupBy(q => q.age)
.Select(g => new { age = g.Key, activities =
g.Select(a => a.activity).Distinct() })
.OrderBy(r => r.age);
var linqQueryResults = await linqQuery.ToListAsync();db.travelers.aggregate([
{
"$unwind":"$activities"
},
{
"$project":{
"age":"$age",
"activity":"$activities",
"_id":0
}
},
{
"$group":{
"_id":"$age",
"__agg0":{
"$addToSet":"$activity"
}
}
},
{
"$project":{
"age":"$_id",
"activities":"$__agg0",
"_id":0
}
},
{
"$sort":{
"age":1
}
}
])Last updated