182 votes

Inclure tous les champs existants et ajouter de nouveaux champs au document

Je voudrais définir un stade d'agrégation de $projet où je peux lui donner l'instruction d'ajouter un nouveau champ et d'inclure tous les champs existants, sans avoir à lister tous les champs existants.

Mon document ressemble à ceci, avec de nombreux champs :

{
    obj: {
        obj_field1: "salut",
        obj_field2: "salut2"
    },
    field1: "a",
    field2: "b",
    ...
    field26: "z"
}

Je veux effectuer une opération d'agrégation comme ceci :

[
    {
        $project: {
            champ_personnalisé: "$obj.obj_field1",
            //la partie suivante est que je ne veux pas faire
            field1: 1,
            field2: 1,
            ...
            field26: 1
        }
    },
    ... //grouper, faire correspondre, et tout ce qui suit...
]

Y a-t-il quelque chose comme un mot-clé "inclure tous les champs" que je peux utiliser dans ce cas, ou un autre moyen d'éviter de devoir lister chaque champ séparément ?

0voto

mr.byte Points 21

Selon la réponse de @Deka, pour le pilote c# mongodb 2.5, vous pouvez obtenir le document regroupé avec toutes les clés comme ci-dessous;

var groupe = new BsonDocument
{
 { "_id", "$groupField" },
 { "_document", new BsonDocument { { "$first", "$$ROOT" } } }
};

ProjectionDefinition projection = new BsonDocument{{ "document", "$_document"}};
var resultat = await col.Aggregate().Group(groupe).Project(projection).ToListAsync();

// Pour la démonstration du premier enregistrement  
var premierElementEnT = BsonSerializer.Deserialize(resultat.ToArray()[0]["document"].AsBsonDocument);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X