如何根据购买和评价图书的其他用户为用户推荐图书?

时间:2016-12-07 19:14:45

标签: php mongodb

我正在使用PHP和MongoDB开发一个简单的推荐引擎。我试图根据其他用户购买的内容为用户推荐书籍。我有这些数据,我想计算每个用户与新用户有多少本书。

收集字段为:

/* 1 */
{
"_id" : ObjectId("58474a61307ad40ea8003587"),
"userid" : "1",
"bookid" : "100",
"rate" : 4
}

/* 2 */
{
"_id" : ObjectId("58474aa9307ad40ea8003588"),
"userid" : "2",
"bookid" : "100",
"rate" : 4
}

/* 3 */
{
"_id" : ObjectId("58474ab0307ad40ea8003589"),
"userid" : "1",
"bookid" : "110",
"rate" : 4
}

/* 4 */
{
"_id" : ObjectId("58474ad7307ad40ea800358a"),
"userid" : "2",
"bookid" : "110",
"rate" : 3
}

/* 5 */
{
"_id" : ObjectId("58474adc307ad40ea800358b"),
"userid" : "3",
"bookid" : "100",
"rate" : 5
}

/* 6 */
{
"_id" : ObjectId("58474af4307ad40ea800358d"),
"userid" : "3",
"bookid" : "120",
"rate" : 4
}

 /* 7 */
{
"_id" : ObjectId("58474b36307ad40ea8003592"),
"userid" : "2",
"bookid" : "120",
"rate" : 5
}

/* 8 */
{
"_id" : ObjectId("58474b43307ad40ea8003593"),
"userid" : "4",
"bookid" : "100",
"rate" : 2
}

我尝试了很多找到解决方案,但没有运气。任何帮助表示赞赏:)

编辑: 我尝试了这段代码,但它不起作用

$out = $purchase->find(["userid"=>"1"]);
foreach($out as $a){
$pipeline = array(
        array('$match' => array('bookid' => $a['bookid'])),
        array('$group' => array('_id' => '$userid',
             'count' => array('$sum' => 1)),
            ),
);
$result = $Ratingscollection->aggregate($pipeline);
    foreach ($result as $aa){
        echo $aa["_id"]."&nbsp";
        echo $aa['count']."</br>";
    }

1 个答案:

答案 0 :(得分:1)

我理解你的问题。你可以试试这个。首先将新用户的bookid存储在名为 newUserBookId 的变量中,并假设在我们的情况下为100。

现在运行以下查询 -

> var newUserBookId ="100";
> db.xx.aggregate([{ $match: { "bookid": newUserBookId } },{$group : {"_id" : "$bookid", num_of_users: {$sum : 1}}}]);

希望这会对你有所帮助。 感谢