簡體   English   中英

mongodb java聚合操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM