agrégation imbriquée mongo avec jointure

bilak

J'ai suivi la collection de locataires:

{id: 1, name: "T1", type: "DEFAULT", state: "ACTIVE"},
{id: 2, name: "T2", type: "DEFAULT", state: "DISABLED"},
{id: 3, name: "T3", type: "STANDARD", state: "ACTIVE"},
{id: 4, name: "T4", type: "TRIAL", state: "DELETED"},
{id: 5, name: "T5", type: "DEFAULT", state: "DISABLED"}

puis deuxième collection avec options:

{id:1, tenantId: 1, opt: "OPERATING"},
{id:2, tenantId: 2, opt: "OPERATING"},
{id:3, tenantId: 3, opt: "POSTPONED"},
{id:4, tenantId: 4, opt: "DELETED"},
{id:5, tenantId: 5, opt: "POSTPONED"}

J'aimerai agréger ces collections pour obtenir une ombre de types de locataires regroupés avec le nombre d'opérations, mais j'aimerais supprimer tous les DELETEDlocataires et toutes les DELETEDoptions de la recherche. Quelque chose comme ça:

{type: "DEFAULT", count: 3, opts: {operating: 2, postponed: 1}}
{type: "STANDARD", count: 1, opts: {postponed: 1}}

Regrouper les locataires, c'est bien, mais je ne sais pas ce que je dois utiliser pour ce prochain groupe d'options.

db.tenant.aggregate([
  {$match: { state: {$ne: "DELETED"}}},
  {$lookup: {
    from: "option",
    localField: "_id",
    foreignField: "tenantId",
    as: "options"
  }},
  {$group {
    _id: "$type",
    count: {$sum: 1}
  }}
])
Turivishal
  • $grouppar typeet obtenir un groupe d'identifiants
  • $lookupavec $incondition de correspondance de pipeline pourtenantId
  • $group en optant et obtenez le nombre d'options
  • $project pour afficher les champs au format k et v
  • $projectpour afficher les champs obligatoires, $sizepour compter le client total et $arrayToObjectconvertir le tableau en objet
db.tenant.aggregate([
  { $match: { state: { $ne: "DELETED" } } },
  {
    $group: {
      _id: "$type",
      ids: { $push: "$id" }
    }
  },
  {
    $lookup: {
      from: "options",
      let: { ids: "$ids" },
      pipeline: [
        { $match: { opt: { $ne: "DELETED" }, $expr: { $in: ["$tenantId", "$$ids"] } } },
        {
          $group: {
            _id: "$opt",
            count: { $sum: 1 }
          }
        },
        {
          $project: {
            _id: 0,
            k: "$_id",
            v: "$count"
          }
        }
      ],
      as: "opts"
    }
  },
  {
    $project: {
      _id: 0,
      type: "$_id",
      count: { $size: "$ids" },
      opts: { $arrayToObject: "$opts" }
    }
  }
])

Terrain de jeux

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Jointure imbriquée avec agrégation dans posgres

Jointure croisée efficace avec agrégation et filtre

Agrégation imbriquée Elasticsearch avec agrégation de plages

Agrégation imbriquée Elasticsearch avec JAVA

dataframe avec agrégation imbriquée

Jointure SQL avec fonction d'agrégation

Agrégation avec Json imbriqué

Agrégation et ligne dupliquée avec une jointure gauche T-SQL

Jointure fenêtrée KDB avec fonction d'agrégation sur les colonnes des deux tables

Curseur avec agrégation Spring Data Mongo

agrégation mongo $lookup avec des tableaux

Utilisation de la jointure avec l'agrégation conditionnelle

jointure interne avec des pipelines d'agrégation

agrégation mongoose $ group avec objet imbriqué

requête mongo avec méthode d'agrégation

Mongo agrégation pour un champ DbRef avec mongoTemplate

Agrégation de données Spring mongo avec annotation @Field

Problème d'agrégation avec Mongo 3.6

Agrégation Mongo en Java: groupe avec plusieurs champs

Agrégation de groupe Mongo avec priorité d'enregistrement

Opérateur $ arrayElemAt en agrégation avec Mongo <3.2

Recherche d'agrégation Mongo 3.6 avec plusieurs conditions

Pipeline d'agrégation Mongo Db avec boucle

Agrégation Mongo DB avec tableau d'objets

Elasticsearch d'agrégation imbriquée avec accès au champ parent pour la sous-agrégation

Agrégation imbriquée Elasticsearch avec objet imbriqué à l'aide de NEST

JOINTURE SQL AVEC REQUÊTE IMBRIQUÉE

Requêtes imbriquées avec fonctions d'agrégation Slick

recherche d'agrégation et correspondance avec un tableau imbriqué

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  3. 3

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  4. 4

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  5. 5

    Passer la taille d'un tableau 2D à une fonction ?

  6. 6

    Exporter la table de l'arborescence vers CSV avec mise en forme

  7. 7

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  8. 8

    Créer un système Buzzer à l'aide de python

  9. 9

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  10. 10

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  11. 11

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  12. 12

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  13. 13

    Conversion double en BigDecimal en Java

  14. 14

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  15. 15

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  18. 18

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  19. 19

    comment afficher un bouton au-dessus d'un autre élément ?

  20. 20

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  21. 21

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

chaudétiquette

Archive