1

Comment créer un super ensemble de champs (sauf _id) présents dans tous les documents d'une même collection de MongoDB en supposant que tous les documents sont du même type mais avec un nombre de champs différent.Surensemble de champs dans tous les documents d'une collection Mongo

Exemple:

doc1 - {"_id":"test1", "firstName":"sample1", "age":24, "state":"Kansas"} 
doc2 - {"_id":"test2", "lastName":"sample2", "age":24, "country":"US"} 

set super serait: {"firstName", "lastName", "age", "state", "country"}

+1

Pouvez-vous s'il vous plaît avoir un meilleur titre et des informations plus détaillées dans le contenu avec votre effort? – manetsus

Répondre

1

Vous pouvez essayez d'exécuter une opération MapReduce qui renverra toutes les clés du document figurant dans la collection d'entrée comme la clé _id du document résultant . Ce sera dans une collection de sortie où vous pouvez ensuite appliquer la commande distincte sur le champ _id pour récupérer le surensemble des champs.

L'exemple qui suit montre ce concept:

// Run mapReduce on collectionName 
String map = "function() { for (var key in this) { emit(key, null); } }"; 
String reduce = "function() {}"; 
MapReduceResults<ValueObject> results = mongoTemplate.mapReduce(
    "collectionName", 
    map, 
    reduce, 
    new MapReduceOptions().outputCollection("col_out"), 
    ValueObject.class 
); 

// Get the distinct keys from output collection col_out 
List<String> fieldsSuperset = mongoTemplate.getCollection("col_out").distinct("_id");