【问题标题】:Mongodb find documents and exclude the duplicates at the same timeMongodb查找文档并同时排除重复项
【发布时间】:2016-05-13 21:47:09
【问题描述】:

想象一下我有这些文件:

{name:'pep', team:'barcelona', age:24}
{name:'boris', team:'madrid', age:52}
{name:'erdem', team:'barcelona', age:41}
{name:'robert', team:'barcelona', age:19}

我想按 20 岁以上的年龄过滤这个列表,并按团队区分结果,所以我会有这个结果:

{name:'pep', team:'barcelona', age:24}
{name:'boris', team:'madrid', age:52}

如何在 MongoDB 中做到这一点?

【问题讨论】:

  • “erdem”怎么了?
  • 'barcelona' team (pep) 已经有了结果。
  • 你为什么选择“pep”而不是“erdem”是你的文档排序还是你只想要每个团队的第一个文档?
  • 其实我不介意它是 pep 还是 erdem,我只是选择了它,因为它是列表中的第一个。顺便说一句,我知道这个例子没有多大意义,但是是的,我正在寻找那个查询。

标签: mongodb find distinct where


【解决方案1】:

您需要使用.aggregate 方法来访问聚合管道。管道中的第一阶段是$match 阶段,您可以在其中过滤掉那些不符合您的条件的文档。管道中的最后一个阶段是 $group 阶段,您可以在其中按 team 对文档进行分组,并使用 $first$last 累加器运算符返回每个组的第一个或最后一个文档。

db.collection.aggregate([
    { "$match": { "age": { "$gt": 20 } } },
    { "$group": { "_id": "$team", "doc": { "$first": "$$ROOT" } } }
])

【讨论】:

  • 谢谢,但我试了一下,得到“errmsg”:“异常:FieldPath 字段名称可能不以 '$' 开头。”
猜你喜欢
  • 2022-08-05
  • 2017-04-01
  • 2015-04-23
  • 2016-04-23
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多