如何使用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}]}
]
}
更新
抱歉,我没有正确解释,推文文件是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 :(得分: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:
$ push运算符将指定值附加到数组。
您可以下载MongoDB Java Driver,然后阅读java doc,尝试与java。
当您遇到困难时,请仔细阅读文档并进行谷歌搜索,如果仍然无效,请显示无效的特定代码。
希望这有帮助。
答案 1 :(得分:0)
利用Riccardo发送的提示,我看看如何使用聚合功能,并且能够获得我需要的结果而无需按小时创建推文集合。
我使用了包含所有推文及其详细信息的集合,并使用下面的函数,能够检索数据:
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}]
]