Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB聚合查询以从另一个集合中查找至少包含一个匹配项的对象_Mongodb_Mongodb Query - Fatal编程技术网

MongoDB聚合查询以从另一个集合中查找至少包含一个匹配项的对象

MongoDB聚合查询以从另一个集合中查找至少包含一个匹配项的对象,mongodb,mongodb-query,Mongodb,Mongodb Query,我正在尝试为我的movies mongo数据库编写一个查询,该数据库有两个集合:movie和ratings,其结构如下: 电影 评级: { "_id" : ObjectId("5bb3e049dac8ab419c4223ed"), "user_id" : 450, "item_id" : 172, "rating" : 4, "timestamp" : 882372103 } 其中,MovieId==项目\标识。 我需要找到所有电影的前十名,至少有一部电

我正在尝试为我的movies mongo数据库编写一个查询,该数据库有两个集合:movie和ratings,其结构如下: 电影

评级:

{
    "_id" : ObjectId("5bb3e049dac8ab419c4223ed"),
    "user_id" : 450,
    "item_id" : 172,
    "rating" : 4,
    "timestamp" : 882372103
}
其中,MovieId==项目\标识。 我需要找到所有电影的前十名,至少有一部电影的评论评级低于3

db.ratings.aggregate([
  {"$match":
    "rating":{"$lt":3}
  },
  {"$group":
    {
      _id: "$item_id",
      ratingAverage: {$avg: "$rating"}
    }
  },
  {$lookup:
  {
    "from": "movie",
    "localField": "_id",
    "foreignField": "MovieId",
    "as": "movie_details"
  }},{$sort : { ratingAverage: -1 } }, {$limit : 10}

])
以下是我尝试查找最有效果的10部电影的id:

db.ratings.aggregate(
  [
    {"$group":
      {
        _id: {item_id:"$item_id"},
        ratingAverage: {$avg: "$rating"}
      }
    } ,{$sort : { ratingAverage: -1 } }, {$limit : 10}
  ]
)
以下是我试图找到评级至少低于3的前10部电影

db.ratings.aggregate([
  {"$match":
    "rating":{"$lt":3}
  },
  {"$group":
    {
      _id: "$item_id",
      ratingAverage: {$avg: "$rating"}
    }
  },
  {$lookup:
  {
    "from": "movie",
    "localField": "_id",
    "foreignField": "MovieId",
    "as": "movie_details"
  }},{$sort : { ratingAverage: -1 } }, {$limit : 10}

])
本申报表:

ok" : 0,
    "errmsg" : "The field 'rating' must be an accumulator object",
    "code" : 40234,
    "codeName" : "Location40234"
有人能给我一些建议吗?

你应该像这样更改你的$match部分:

...
{"$match":
    { "rating":{"$lt":3} }
},
...

您可能忘记在$match的查询中添加{},谢谢!它刚刚解决了语法问题。然而,我没能从这个查询中得到前10部电影。您有什么建议吗?@K.U删除第一个$match部分,取而代之的是,获取所有电影分级低于3的电影的项目id列表,然后使用$filter筛选此列表中的所有电影,然后,您可以在这个过滤的评级列表中获得平均评级,并获得前十名。很抱歉,我无法为您编写一个聚合查询示例,因为我必须生成一个假数据集才能自己测试查询,但如果您尝试过,但自己无法完成,您可以将mongodump上传到某个地方,并在此处放置一个链接,这样我就可以基于该数据编写查询。