使用mongodb过滤聚合

使用mongodb过滤聚合,mongodb,Mongodb,我需要筛选此查询,以便不显示值未定义的文档。目前,我的代码显示以下结果: db.getCollection("actors").find({}) db.actors.aggregate([ { $group: { _id: "$cast", Peliculas: { $sum: 1 } }, }, { $sort: { Peliculas: -1 } }, { $limit: 2 } ]) 我需要一些过滤器,使未定义的消失,以便将我显示为第一

我需要筛选此查询,以便不显示值
未定义的文档。目前,我的代码显示以下结果:

db.getCollection("actors").find({})

db.actors.aggregate([
    {
        $group: { _id: "$cast", Peliculas: { $sum: 1 } },
    },
    { $sort: { Peliculas: -1 } },
    { $limit: 2 }
])

我需要一些过滤器,使
未定义的
消失,以便将我显示为第一个值:
哈罗德·劳埃德

我以前执行过以下操作:

//unwind
    db.getCollection("Tarea").find({})
    fase1 = { $unwind: "$cast"}
    etapas = [fase1]
    db.Tarea.aggregate( etapas )

    //out
    fase1 = { $unwind: "$cast" }
    query2 = { "_id": 0 }
    fase2 = { $project: query2 }
    fase3 = { $out: "actors" }
    etapas = [ fase1, fase2, fase3 ]
    db.Tarea.aggregate( etapas )
现在我有了一个名为“演员”的新收藏。

试试这个

参考文献

试试这个

参考文献


@hbamithkumara如果您想消除
强制转换数组为空的所有记录,那么答案将非常有效。但是,如果您还想显示所有
空强制类型数组
的计数
Peliculas
,并使用默认文本,如
无强制类型
,您可以尝试以下操作

你可以测试一下

结果是

   [
  {
    "Peliculas": 1,
    "_id": [
      "Paul Boyton"
    ]
  },
  {
    "Peliculas": 1,
    "_id": [
      "Ching Ling Foo"
    ]
  },
  {
    "Peliculas": 21,
    "_id": [
      "No Cast"
    ]
  }
]

@如果您想消除
强制转换数组为空的所有记录,hbamithkumara answer将非常有效。但是,如果您还想显示所有
空强制类型数组
的计数
Peliculas
,并使用默认文本,如
无强制类型
,您可以尝试以下操作

你可以测试一下

结果是

   [
  {
    "Peliculas": 1,
    "_id": [
      "Paul Boyton"
    ]
  },
  {
    "Peliculas": 1,
    "_id": [
      "Ching Ling Foo"
    ]
  },
  {
    "Peliculas": 21,
    "_id": [
      "No Cast"
    ]
  }
]

我最终解决了这个问题,在代码中添加了这一行:

{$match: {cast:{$ne:"Undefined"}}}
现在完整的代码如下所示:

db.actors.aggregate([
{$match: {cast:{$ne:"Undefined"}}},
{$group : {_id: "$cast", total : {$sum: 1 }}},
{$sort:{total:-1}},
{$limit:5}])
我可以在没有未定义的情况下看到前5名演员名单:


谢谢大家。

我终于解决了问题,在代码中添加了这一行:

{$match: {cast:{$ne:"Undefined"}}}
现在完整的代码如下所示:

db.actors.aggregate([
{$match: {cast:{$ne:"Undefined"}}},
{$group : {_id: "$cast", total : {$sum: 1 }}},
{$sort:{total:-1}},
{$limit:5}])
我可以在没有未定义的情况下看到前5名演员名单:


谢谢大家。

您能分享json示例吗?当然可以。json就在这里:这是否回答了您的问题?你能分享一下json示例吗?当然可以。json就在这里:这是否回答了您的问题?我认为这是没有必要的,因为有人提到我需要一些过滤器,使未定义的消失在问题中。你的答案是正确的,工作,但这只是另一个可用的选项,可能会在其他一些用例中派上用场。我认为这是没有必要的,因为有人提到我需要一些过滤器,使未定义的消失在问题中问题。您的答案是正确的,而且有效,但这只是另一个选项,可能在其他用例中派上用场。谢谢大家。也许我没有很好地表达自己。我需要的正是:在演员方面,获得一份参与过更多电影的演员名单(可以将其限制为一个,因为该参数可以修改),不删除未定义的记录,但对其进行筛选,使其不会出现在查询中。我希望它们继续显示为未定义的记录,但不要显示为参与电影的顶级演员。谢谢!谢谢大家。也许我还没有很好地表达自己。我需要的是:在演员方面,获取演员的顶级列表参与过更多电影的rs((t可以限制为仅一部,因为该参数可以修改),不删除未定义的记录,但对其进行过滤,使其不会出现在查询中。我希望他们继续显示为未定义,但不要显示为参与过电影的顶级演员。谢谢!