2017-10-13 155 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" } 
     } 
    } 

])