【问题标题】:How to get multiple distinct fields in MongoDB?如何在 MongoDB 中获取多个不同的字段?
【发布时间】:2021-01-22 11:39:27
【问题描述】:

我正在使用带有 Nodejs 的 MongoDB。 例如:

Array = [{name: 'Sam',  age: 26, hobby: 'Baseball'},
         {name: 'Sam',  age: 30, hobby: 'Baseball'},
         {name: 'John', age: 26, hobby: 'Baseball'},
         {name: 'Mike', age: 32, hobby: 'Baseball'},
         {name: 'Max',  age: 32, hobby: 'Baseball'},]
        
                                                    

我想要一个不重复任何 nameage 值的查询,并给我结果 => [ {name: 'Sam', age: 26, hobby: 'Baseball'},{name: 'Mike', age: 32, hobby: 'Baseball'} ]

是否可以使用 MongoDB 和 Nodejs?

我检查了 distinct(),但它只需要填写一个作为查询。

【问题讨论】:

  • 约翰和马克斯怎么了?
  • @varman 其中age 在重复。我想要字段nameage 没有重复值的记录
  • 你试过 $unwind 管道了吗?请浏览this页面
  • @Bubai 其实我是新手,所以很难理解。

标签: mongodb distinct


【解决方案1】:

您可以使用$facet 来分类名称和年龄

  • $sort 按年龄排序
  • $facet 将传入数据分为两组。一种是按姓名分组,另一种是按年龄分组。
  • $setIntersection 获取两个数组的公共对象。但是请看if the key order is changed

脚本是

db.collection.aggregate([
  { $sort: { age: 1 } },
  {
    $facet: {
      nameGroup: [
        {
          $group: {
            _id: "$name",
            name: { $first: "$name" },
            age: { $first: "$age" },
            hobby: { $first: "$hobby" }
          }
        },
        { $project: { _id: 0 } }
      ],
      ageGroup: [
        {
          $group: {
            _id: "$age",
            name: { $first: "$name" },
            age: { $first: "$age" },
            hobby: { $first: "$hobby" }
          }
        },
        { $project: { _id: 0 } }
      ]
    }
  },
  {
    $project: {
      data: { "$setIntersection": [ "$nameGroup", "$ageGroup" ] }
    }
  }
])

工作Mongo playground

【讨论】:

  • 非常感谢兄弟。我搜索了很多次,但没有找到任何东西。你解决了。这是我在 StackOverFlow 上的第一个问题,我很高兴我这么快就得到了解决方案。
猜你喜欢
  • 2019-02-11
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2014-12-13
  • 2020-04-30
相关资源
最近更新 更多