agrégation mongodb avec $ project pour exclure conditionnellement un champ

xavier.seignard

Je voudrais exclure un champ d'un pipeline mongo db aggergtion, après avoir lu la documentation, j'ai pensé qu'il fallait spécifier 1 ou 0 pour garder le champ ou non (cf. http://docs.mongodb.org/manual/ référence / opérateur / agrégation / projet / )

J'ai donc essayé ce qui suit (en utilisant node.js mongoose, mais la syntaxe est assez similaire à celle de plain mongo):

aggregate.match({ date: { $gte : today } });
aggregate.sort('-date');
aggregate.group({
    _id: '$name',
    date: { $first: '$date' },
    user: { $first: '$user' },
    app: { $first: '$app' }
});
aggregate.project({
    _id: 1,
    last: { $cond: [ { $eq : [ '$_id', 'undo' ] }, '$date', 0 ] },
    user: { $cond: [ { $eq : [ '$_id', 'undo' ] }, '$user', 0 ] },
    app: { $cond: [ { $eq : [ '$_id', 'undo' ] }, '$app', 0 ] }
});

Mais en faisant cela, je termine avec des documents comme celui-ci:

[ 
  {
    _id: 'devices',
    user: 0,
    app: 0,
    last: 0
  },
  { 
    _id: 'undo',
    user: 'test',
    app: 'truc',
    last: Mon Jan 26 2015 16:21:53 GMT+0100 (CET)
  }
]

Je veux que le user, appet daten'apparaisse que quand _idest undo.

Comment y parvenir?

Merci!

David

À partir de mongoDB 3.6, vous pouvez utiliser la variable REMOVE pour exclure des champs de manière conditionnelle.

Dans votre cas particulier, l'étape du projet devrait ressembler à ceci:

aggregate.project({
    _id: 1,
    last: { $cond: [ { $eq : [ '$_id', 'undo' ] }, '$date', '$$REMOVE' ] },
    user: { $cond: [ { $eq : [ '$_id', 'undo' ] }, '$user', '$$REMOVE' ] },
    app: { $cond: [ { $eq : [ '$_id', 'undo' ] }, '$app', '$$REMOVE' ] }
});

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 MongoDB avec $ lookup pour afficher uniquement le résultat d'un champ

Agrégation MongoDB avec $lookup pour le champ à l'intérieur d'un tableau

MongoDB : agrégation avec un champ contenant un point

MongoDB : agrégation avec un champ contenant un point

Mongo agrégation pour un champ DbRef avec mongoTemplate

Créer un nouveau champ à partir d'un champ imbriqué avec framework d'agrégation, MongoDB

Agrégation C # MongoDB.Driver avec Project ne renvoyant pas le champ _id

Comment regrouper des documents avec un champ spécifique dans l'agrégation de mongodb

Agrégation Par date de correspondance $ ou avec un autre champ dans Mongodb en C #

Pipeline d'agrégation MongoDB: compter les documents avec un champ est inférieur à la valeur?

Comment remplir un champ dans un tableau avec agrégation

Agrégation avec mongodb

Supprimer un champ particulier pour tous les documents d'une collection à l'aide de l'agrégation MongoDB

Supprimer un champ particulier pour tous les documents d'une collection à l'aide de l'agrégation dans mongoDB

Agrégation MongoDb pour filtrer la liste en fonction des identifiants et mapper cette liste filtrée à un autre champ

Puis-je obtenir des décomptes pour différentes valeurs de champ dans un pipeline d'agrégation MongoDB ?

Recherche conditionnelle d'une chaîne et concat avec un autre champ en utilisant l'agrégation MongoDB

mongodb - agrégation avec $ match $ in avec un pipeline $ lookup

Agrégation ElasticSearch: exclure un filtre par agrégation

Filtrer un graphique agrégé avec un autre champ d'agrégation

Comment puis-je mettre des valeurs nulles pour séparer le champ et les autres sur un champ différent dans l'agrégation MongoDB?

L'agrégation MongoDB utilise $ elemMatch pour un tableau imbriqué

agrégation mongodb ajouter un champ dérivé d'un autre champ

Agrégation MongoDB avec groupe par champ imbriqué et comptage par autre champ

MongoDB - convertir un double en chaîne avec agrégation

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

mongodb: comment extraire un champ au lieu d'obtenir un objet avec un agrégat + $ lookup + $ project

mongoDB: agrégation qui ajoute un champ de champ de comptage dans la collection

Agrégation MongoDB avec $or et $and

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