2017-02-09 32 views
-1

我怎样才能添加新文档到子文件阵列上的MongoDB与Java?如何添加文件到子文件阵列 - 的Java/MongoDB的

对于为例,附加{tweetId:456}到的文档 “鸣叫” 的数组:

{ 
    day : 20170209, 
    hours : { 
      hour : 20, 
      tweets : {tweetId : 123 } 
      }  
} 

期望的结果:

{ 
    day : 20170209, 
    hours : [ {hour : 20, 
      tweets : [{tweetId : 123},{tweetId : 456}]}, 
      {hour : 21, 
      tweets : [{tweetId : 567},{tweetId : 890}]} 
      ]  
} 

UPDATE

对不起,我没有没有正确解释,tweets文档是一个tweetsId数组。我修正了上面的例子以更好地理解。

例如,与只用2级的集合:

{ 
    "_id":{ 
     "$oid":"589c5a1047e9062f004b84a3" 
    }, 
    "hashtag":"BRASIL", 
    "tweets":[ 
     { 
     "tweetId":"829661297121845249" 
     }, 
     { 
     "tweetId":"829661278352269313" 
     } 
    ] 
} 

我可以追加新的TweetId此阵列:

collection.updateOne(new Document("hashtag", hashtag), 
        new Document("$push", new Document("tweets", new Document("tweetId", tweetId)))); 

但是,当阵列是在第3级(小时>鸣叫> TweetId),我无法找到正确的方法。

希望现在是更好的解释。

+0

我想你正试图实现在蒙戈时间系列,在[在MongoDB中实现时间序列](https://dzone.com/articles/implementing-time-series-in-mongodb)中进行了解释。但是,这不是正确的方法。如果您不希望数据库开始将文档移动到内存中,则文档应该长度固定。然后,不要使用数组。 –

+0

嗨,Riccardo。其实我试图按小时整理推文。 –

+0

您确定正确的文档模式是您正在使用的模式吗?我的意思是,对于一个* hashtag *,你可以拥有百万条推文,而不是单个阵列中的脚。请记住,文档在MongoDB中具有最大大小。我建议你每个推文都有一个文档,并带有一个标签列表。然后,使用聚合框架与他们正常工作。 –

回答

0

由里卡尔多·发送的文章中,我如何使用聚合功能,并能得到我需要不通过鸣叫每小时创造一个集合的结果。

我用了所有的细节的鸣叫的收集,并与下面的功能,能够检索数据:

tweetsCol.aggregate([ 
        {$group: {_id : {Date : "$date", Hour : '$hour'}, Total : {$sum : 1}}} 
        ]) 

我的鸣叫的收集有如下信息:

"tweetId" : String, 
"userId" : String, 
"username" : String, 
"followers" : String, 
"language" : String, 
"fulldate" : String, 
"date" : String, 
"hour" : String, 
"text" : String, 
"hashtags" : [{ 
    "tweetId" : String 
}] 

查询结果:

[{Date : 20170209, 
hours : [{hour : 21, Total: 45}, 
      {hour : 22, Total: 22}]}, 
{Date : 20170210, 
hours : [{hour : 11, Total: 38}, 
      hour : 17, Total : 71}] 
] 
0

您不能设置像{tweetId : 123, tweetId : 456}字典,多个密钥是非法的,这是不是一个数组。

我建议你重新设计你的文档结构,也许这个文件的结构是你想要的:

tweets : [ 
{ 
    tweetID:123, 
    text:"Hello", 
    date:"2017-01-31-09-01-01" 
    }, 
{ 
    tweetID:456, 
    text:"Hi", 
    date:"2017-01-31-09-01-01" 
    } 
] 

要追加元素数组,你可以使用$push

的$推动运营商追加给数组指定值。

您可以下载MongoDB Java Driver然后读取java doc试试看用java。

当您遇到问题,请仔细阅读文档和谷歌,如果它仍然不能正常工作,请表明不工作特定的代码块。

希望这会有所帮助。

+0

嗨,麦格雷迪。感谢您的回答。我试图做的是创建一个集合,每天的每小时都有tweetIds。 –

+0

@PedroGrandi请阅读MongoDB文档,您也可以查看[mongodb push in nested array](http://stackoverflow.com/questions/27874469/mongodb-push-in-nested-array)。试试看。 – McGrady

+0

我读了很多文档并且google了一下,这就是我在第二级时如何将新文档推入数组(如hashtag示例)。但问题在于数组在3级时(如day> hour> tweets>)。 –