2017-10-05 1 views
0

Les données ressemble à ceci - dans trois documents différents:MongoDB résultat divisé en tableaux basés sur la propriété

{ "location": "X", // LOCATION X 
    "property1": "value", 
    "property2": "value"} 

{ "location": "X", // LOCATION X 
    "property1": "value", 
    "property2": "value"} 

{ "location": "Y", // LOCATION: Y 
    "property1": "value", 
    "property2": "value"} 

Les entrées doivent être triées par emplacement et toutes les entrées qui ont le même endroit devraient tous être dans le même tableau. Ainsi, dans l'exemple, la requête mongodb doit retourner un tableau qui contient uniquement des données où l'emplacement est égal à "X" et un autre tableau avec une seule entrée où l'emplacement est égal à "Y".

Je ne veux pas faire ce travail dans le frontend. Comment ferais-je cela en mongodb en utilisant Node.js?

+1

L'exemple de données est-il un champ d'un seul document ou de trois documents séparés? – barbakini

+0

@barbakini il existe trois documents distincts, je mettre à jour la question –

Répondre

2

Vous pouvez utiliser le cadre d'agrégation MongoDB pour que https://docs.mongodb.com/manual/reference/operator/aggregation/group/

db.myCol.aggregate(
    [ 
     { 
     $group : { 
      _id : "$location", entries:{$push: {property1:"$property1", property2:"$property2"}} 
    } 
     } 
]) 

Si vous voulez que l'objet entier, remplacez
{property1:"$property1", property2:"$property2"}

avec "$$ROOT"

db.myCol.aggregate(
    [ 
     { 
     $group : { 
      _id : "$location", entries:{$push: "$$ROOT"} 
    } 
     } 
])