我正在使用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"]." ";
echo $aa['count']."</br>";
}发布于 2016-12-08 05:25:33
因为我理解你的问题。你可以试试这个。首先,将新用户的书号存储在一个名为newUserBookId的变量中,在我们的示例中,假设该值为100。
现在运行以下查询-
> var newUserBookId ="100";
> db.xx.aggregate([{ $match: { "bookid": newUserBookId } },{$group : {"_id" : "$bookid", num_of_users: {$sum : 1}}}]);希望这能帮到你。谢谢
https://stackoverflow.com/questions/41025524
复制相似问题