2017-02-09 58 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>)。 –