![](/img/trans.png)
[英]mongodb java driver hide id field in aggregation/projection operation
[英]mongodb java aggregation operation
movies: {
_id: "1"
name: "comedy"
userratings: [{
user_id: "11",
count: 4
}, {
user_id: "22",
count: 2
}]
}
movies: {
_id: "2"
name: "funny"
userratings: [{
user_id: "22",
count: 8
}]
}
users: {
_id: "11",
name: "jhon",
userFriends: [{
user_id: "22"
}, {
user_id: "12"
}]
}
users: {
_id: "22",
name: "tom",
userFriends: [{
user_id: "11"
}]
}
我有兩個收藏:用戶和電影。 users集合包括用戶信息和他的朋友列表。 電影集合包括電影信息和該電影的用戶評級。
我的問題是:如何找到用戶的朋友(而不是用戶)評分的電影,並按朋友的評分總數排序(最多5條記錄)。
我在mongodb中使用Java
您需要在應用程序級別(即使用Java代碼)實現此操作。 MongoDB是一個文檔存儲,因此它不支持集合之間的關系,而您想要做的事情涉及的關系包括電影-> user_id->用戶->朋友。 您需要使用Java分別檢索用戶和電影,並在Java代碼中實現聯接。 您將無法通過單個MongoDB查詢來執行此操作。
假定用戶不能與他/她自己成為朋友,我將這樣做:
1)從具有_id =(your_user_id)的用戶那里獲取所有userFriends:
users.find({_id : (your_user_id)}, {userFriends.user_id : 1})
2)從具有一個userratings.user_id =(步驟1中的userFriends之一)的電影中獲取所有文檔。 +按userratings.count分組+限制5。類似這樣的東西:
movies.aggregate(
[
{$match : {userratings : {user_id : { $in (userFriends)}}},
{$group : {_id : _id, count : {$sum : userratings.count}}},
{$sort : {count : 1}},
{$limit : 5}
]
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.