2017-10-13 104 views
0

我試圖修改mongodb中的數據結構,但我不知道一個好方法。合併mongodb中的記錄

當前數據:

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

我想從上面一個下面創建數據:

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

我知道我應該使用關係型數據庫,但我必須使用MongoDB的出於某種原因。

+0

查看mongo聚合'$ group'和https://docs.mongodb.com/manual/reference/operator/aggregation/addToSet/ – Yogesh

回答

1

您可以使用$out在新結構中的數據保存在MongoDB中。您可以存儲新的集合或替換相同的集合。對於相同的集合先保留備份然後再測試。

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

]) 

N.B:如果你只是想送你預期的格式數據作爲響應,但不希望更改的數據結構,那麼就不需要$out階段。

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

]) 
+0

請解釋爲什麼這個回答的問題 – 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

請複習[如何寫出一個好的答案](https://stackoverflow.com/help/how-to-answer)。不接受代碼的答案是不鼓勵的,因爲他們沒有解釋他們如何解決問題中的問題。你應該更新你的答案,以解釋這是什麼以及如何解決問題。 – FluffyKitten

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

])