2017-10-13 2 views
0

J'essaie de modifier la structure de données dans mongodb, mais je ne connais pas un bon moyen.Fusionner des enregistrements dans mongodb

Données actuelles:

{"user_id": 123, "prod_id": 123}, 
{"user_id": 123, "prod_id": 234}, 
{"user_id": 123, "prod_id": 345}, 
... 

Et je veux créer les données ci-dessous en haut un:

{"user_id": 123, "prod_id": [123, 234, 345]}, 
... 

Je sais que je devrais utiliser db relationnelle, si je dois utiliser MongoDB pour une raison quelconque .

+0

Vérifiez mongo aggregation '$ group' et https://docs.mongodb.com/manual/reference/operator/aggregation/addToSet/ – Yogesh

Répondre

1

Vous pouvez utiliser $out pour enregistrer les données dans la nouvelle structure dans MongoDB. Vous pouvez stocker dans une nouvelle collection ou remplacer la même collection. pour la même collection, gardez d'abord la sauvegarde puis testez.

db.collectionName.aggregate([ 
{ 
    $group: 
     { 
     _id:"$user_id", 
     prod_id: { $addToSet: "$prod_id" } 
     } 
    }, 
    { $out : "newCollectionName" } 

]) 

N.B.: Si vous voulez juste d'envoyer vos données de format attendu comme une réponse, mais ne veulent pas changer la structure de données alors ne pas besoin $out scène.

-1
db.collection.aggregate([ 
      { 
       $group:{ 
        _id:"$user_id", 
        prod_id: { $push: "$prod_id" } 
        } 
      } 

]) 
+0

Veuillez expliquer pourquoi cela répond à la question – loki

0

https://docs.mongodb.com/manual/reference/operator/aggregation/push/#grp._S_push

db.sales.aggregate(
    [ 
    { 
     $group: 
     { 
      _id: '$user_id', 
      'prod_id': { $push: '$prod_id' } 
     } 
    } 
    ] 
) 
+0

Veuillez lire [Comment écrire une bonne réponse? ] (https://stackoverflow.com/help/how-to-answer). Les réponses au code uniquement sont déconseillées car elles n'expliquent pas comment elles résolvent le problème dans la question. Vous devriez mettre à jour votre réponse pour expliquer ce que cela fait et comment cela résout le problème. – FluffyKitten

0
db.sales.aggregate([ 
{ 
    $group: 
     { 
     _id:"$user_id", 
     prod_id: { $addToSet: "$prod_id" } 
     } 
    } 

])