Agrégation Mongo pour collecter des éléments de tableau en fonction du nom du champ

Bateau

J'ai un document mongo agrégé comme ci-dessous. Il existe deux lots différents (" -Minor" et " -Major"), et chaque lot a également des "batchElements".

{
    "_id" : "123",
    "info" : {
        "batch" : "Batch1-Minor"
    },
    "batchElements" : {
        "elements" : [ 
             { },  { }, .... { }
        ]
    }
},
{
    "_id" : "123",
    "info" : {
        "batch" : "Batch2-Minor"
    },
    "batchElements" : {
        "elements" : [ 
             { },  { }, .... { }
        ]
    }
},
{
    "_id" : "123",
    "info" : {
        "batch" : "Batch3-Major"
    },
    "batchElements" : {
        "elements" : [ 
             { },  { }, .... { }
        ]
    }
},
{
    "_id" : "123",
    "info" : {
        "batch" : "Batch4-Major"
    },
    "batchElements" : {
        "elements" : [ 
             { },  { }, .... { }
        ]
    }
}

Comment puis-je collecter tous les "batchElements" de " -Minor" et " -Major" et créer un document comme ci-dessous;

Production:

  {
    "_id" : "123",
    "minorElements" : [
        [{}, {}, {}, ..... {} ], // elements of "Batch1-Minor"
        [{}, {}, {}, ..... {} ], // elements of "Batch2-Minor"
        ...                      // elements of "BatchN-Minor"
    ],
    "majorElements" : [
        [{}, {}, {}, ..... {} ], // elements of "Batch3-Major"
        [{}, {}, {}, ..... {} ], // elements of "Batch4-Major"
        ...                      // elements of "BatchN-Major"
    ]
}
Mickl

Vous pouvez commencer par $ split pour obtenir le «type» de votre lot dans le cadre de votre groupe $ _id . Ensuite , vous pouvez exécuter un autre $grouppour faire minoret majorparties du même document. Dans la dernière étape, vous avez besoin de $ replaceRoot avec $ arrayToObject pour promouvoir les deux tableaux au niveau racine.

db.collection.aggregate([
    {
        $group: {
            _id: {
                id: "$_id",
                type: { $arrayElemAt: [ { $split: [ { $toLower: "$info.batch" }, "-" ] }, 1 ] }
            },
            docs: { $push: "$batchElements.elements" }
        }
    },
    {
        $group: {
            _id: "$_id.id",
            data: { $push: { k: { $concat: ["$_id.type","Elements"] }, v: "$docs" } }
        }
    },
    {
        $replaceRoot: {
            newRoot: {
                $mergeObjects: [ { _id: "$_id" }, { $arrayToObject: "$data" } ]
            }
        }
    }
])

Aire de jeux Mongo

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

Agrégation Mongo: Comment exclure des éléments du tableau, s'ils n'ont pas de clés spécifiques?

$ lookup pour chaque élément de l'agrégation du tableau mongo

Filtrer l'agrégation de buckets Elasticsearch en fonction du champ de terme

Agrégation Mongo sur les éléments du tableau

Comment changer le nom de la classe en fonction des éléments du tableau ?

Agrégation Mongo, projetez un sous-champ du premier élément du tableau

Mettre à jour le champ des éléments du tableau mongo à partir de son autre champ

Requête d'agrégation ElasticSearch pour sélectionner les 1 premiers pour chaque groupe en fonction des valeurs du tableau de termes

Comment effectuer une agrégation de termes en fonction du nom de domaine URL à l'aide de Nest ElasticClient

Agrégat Mongo: champ de comptage de somme du champ de valeur de tableau en double

Tri des valeurs dans un tableau structuré numpy en fonction de la valeur du nom de champ

Regrouper par le contenu du tableau de chaînes sans ordre dans l'agrégation Mongo

fonction swift pour renvoyer l'index du tableau en fonction du nom

Positionnement des div en fonction des éléments du tableau

Remplissez le champ du nom d'utilisateur en fonction de l'entrée du prénom et du nom

Joindre des tables en fonction du résultat de la fonction d'agrégation

Agrégation Mongodb $ project obtenir la valeur du champ de l'élément de position du tableau

exclure des éléments en fonction de la valeur du champ

Trier les éléments du tableau en fonction des valeurs de date dans le tableau

Rechercher des éléments dans le tableau en fonction de la condition du tableau interne

Comment filtrer l'objet en fonction des éléments du tableau à l'aide de javaScript ?

Utilisez l'agrégation pour faire correspondre un champ du document avec la taille de tableau de ce même document

Algorithme pour supprimer les éléments du tableau un par un en fonction de l'index

Échantillonnage de l'index aléatoire à partir de ndarray en fonction des éléments du tableau

Filtrage des éléments du tableau à partir des éléments d'un autre tableau dans l'agrégation mongodb

Comment calculer la valeur moyenne des éléments du tableau dans l'agrégation MongoDB ?

Utilisation de type script pour filtrer deux tableaux en fonction de certains éléments du tableau

Comment mettre à jour l'attribut en fonction du résultat de la fonction d'agrégation

Java Modifier l'ordre des éléments du tableau en fonction de colonnes spécifiques

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