Using a collection's aggregation pipeline with all records of another collection

Jeril

I have two collections:

Books

{
  "BOOK_ID": "100",
  "BOOK_NAME": "Book 1",
  "BOOK_DESC": "abcd",  
},
{
  "BOOK_ID": "101",
  "BOOK_NAME": "Book 2",
  "BOOK_DESC": "efgh",  
},
{
  "BOOK_ID": "102",
  "BOOK_NAME": "Book 3",
  "BOOK_DESC": "ijkl",  
}

BookGroup

{
  "GROUP_ID": "100",
  "GROUP_NAME": "G1",
  "GROUPS": [
    {
      "BOOK_ID": "100",
      "BOOK_NAME": "Book 1"
    },
    {
      "BOOK_ID": "101",
      "BOOK_NAME": "Book 2"
    }
  ]
},
{
  "GROUP_ID": "101",
  "GROUP_NAME": "G2",
  "GROUPS": [
    {
      "BOOK_ID": "101",
      "BOOK_NAME": "Book 2"
    }
  ]
},
{
  "GROUP_ID": "102",
  "GROUP_NAME": "G3",
  "GROUPS": [
    {
      "BOOK_ID": "100",
      "BOOK_NAME": "Book 1"
    },
    {
      "BOOK_ID": "102",
      "BOOK_NAME": "Book 3"
    }
  ]
}

I have a query to get the associated groups of a single book, following is the query:

db.BookGroup.aggregate([
  {
    "$unwind": "$GROUPS"
  },
  {
    "$match": {
      "GROUPS.BOOK_NAME": "Book 2"
    }
  },
  {
    "$group": {
      "_id": null,
      "group_name": {
        "$push": "$GROUP_NAME"
      }
    }
  },
  {
    "$project": {
      "_id": false,
      "group_name": true
    }
  }
])

It is able to get the group names of a single book Book 2. And following is the output:

[
  {
    "group_name": [
      "G1",
      "G2"
    ]
  }
]

It is working as expected. Now I would like to get the groups associated to each book but I am not able to do it using the pipeline.

Following is the expected output:

{
  "BOOK_ID": "100",
  "BOOK_NAME": "Book 1",
  "BOOK_DESC": "abcd",
  "group_name": ["G1", "G3"]
},
{
  "BOOK_ID": "101",
  "BOOK_NAME": "Book 2",
  "BOOK_DESC": "efgh",
  "group_name": ["G1", "G2"]
},
{
  "BOOK_ID": "102",
  "BOOK_NAME": "Book 3",
  "BOOK_DESC": "ijkl",
  "group_name": ["G3"]
}

This is the mongo playground link.

Kindly advise. Thank you.

Yong Shun

You should work with $lookup to join both Books and BookGroup collections and get the GROUP_NAME.

db.Books.aggregate([
  {
    $lookup: {
      from: "BookGroup",
      localField: "BOOK_ID",
      foreignField: "GROUPS.BOOK_ID",
      as: "groups"
    }
  },
  {
    $set: {
      group_name: {
        $map: {
          input: "$groups",
          in: "$$this.GROUP_NAME"
        }
      }
    }
  },
  {
    $unset: "groups"
  }
])

Demo @ Mongo Playground

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

Add feature from one collection to another in MongoDB using the Aggregation Pipeline

How to add a particular value for all records in the collection using aggregation

Aggregate a collection of timestamps in MongoDB using the Aggregation Pipeline

Reformat collection using aggregation pipeline in Mongodb

Query all user records in another collection using array object id

Update, aggregation pipeline in pymongo with using $merge operation to update the collection which is deleting all existing fields in the nested field

How can I return the minimum values from two subdocuments in a collection using MongoDB's aggregation pipeline?

Aggregation pipeline slow with large collection

How to update all records in a collection using graphql

Remove a particular field for all documents in a collection using MongoDB aggregation

Remove a particular field for all documents in a collection using aggregation in mongoDB

aggregation with insertion of data from one collection into another

Count recurrences in a collection and merge aggregation result to another collection

filter records from a collection having max value of a particular column using aggregation in mongodb

Crop a collection of lines using another collection of lines

Does the "out" stage of the aggregation pipeline keeps an ordered collection?

Reference document fields in collection of embedded documents in aggregation pipeline

update matched records from another collection?

Laravel - Get records collection, if not exists in another table

Moving records from one collection to another PyMongo

How to transfer multiple data from one collection to another using $out aggregation

Need a distinct count on multiple fields that were joined from another collection using mongodb aggregation query

Select all fields from collection with related items in another collection using LINQ

Find all records that match a pattern in collection

Printing all records in a mongoDB Collection Golang

Nested inside nested Objects with same key aggregation with another collection in mongoDB

Return matched child object from another collection in Mongodb aggregation

Copy all columns of collection to single column of another collection on object format

Copy all the column data of a collection except one into another collection in mongodb

TOP Ranking

  1. 1

    Failed to listen on localhost:8000 (reason: Cannot assign requested address)

  2. 2

    Loopback Error: connect ECONNREFUSED 127.0.0.1:3306 (MAMP)

  3. 3

    How to import an asset in swift using Bundle.main.path() in a react-native native module

  4. 4

    pump.io port in URL

  5. 5

    Compiler error CS0246 (type or namespace not found) on using Ninject in ASP.NET vNext

  6. 6

    BigQuery - concatenate ignoring NULL

  7. 7

    ngClass error (Can't bind ngClass since it isn't a known property of div) in Angular 11.0.3

  8. 8

    ggplotly no applicable method for 'plotly_build' applied to an object of class "NULL" if statements

  9. 9

    Spring Boot JPA PostgreSQL Web App - Internal Authentication Error

  10. 10

    How to remove the extra space from right in a webview?

  11. 11

    java.lang.NullPointerException: Cannot read the array length because "<local3>" is null

  12. 12

    Jquery different data trapped from direct mousedown event and simulation via $(this).trigger('mousedown');

  13. 13

    flutter: dropdown item programmatically unselect problem

  14. 14

    How to use merge windows unallocated space into Ubuntu using GParted?

  15. 15

    Change dd-mm-yyyy date format of dataframe date column to yyyy-mm-dd

  16. 16

    Nuget add packages gives access denied errors

  17. 17

    Svchost high CPU from Microsoft.BingWeather app errors

  18. 18

    Can't pre-populate phone number and message body in SMS link on iPhones when SMS app is not running in the background

  19. 19

    12.04.3--- Dconf Editor won't show com>canonical>unity option

  20. 20

    Any way to remove trailing whitespace *FOR EDITED* lines in Eclipse [for Java]?

  21. 21

    maven-jaxb2-plugin cannot generate classes due to two declarations cause a collision in ObjectFactory class

HotTag

Archive