如果一个字段不同,则查找集合详细信息

时间:2018-10-21 07:45:47

标签: mongodb distinct

我有给定的教师详细资料数据库

{ "_id" : ObjectId("5bcc0a44f2752576a8545d99"), "Teacher_id" : "Pic002", "Teacher_Name" : "Ravi Kumar", "Dept_Name" : "IT", "Salary" : 40000, "Status" : "A" }

{ "_id" : ObjectId("5bcc0a5af2752576a8545d9a"), "Teacher_id" : "Pic003", "Teacher_Name" : "Akshay", "Dept_Name" : "Comp", "Salary" : 25500, "Status" : "N" }

{ "_id" : ObjectId("5bcc0a85f2752576a8545d9b"), "Teacher_id" : "Pic003", "Teacher_Name" : "Akshay", "Dept_Name" : "Comp", "Salary" : 25500, "Status" : "N" }

{ "_id" : ObjectId("5bcc0a9af2752576a8545d9c"), "Teacher_id" : "Pic004", "Teacher_Name" : "Sumit", "Dept_Name" : "Mech", "Salary" : 35000, "Status" : "N" }

我如何列出部门名称不同的老师的完整详细信息?

基本上,我想显示此集合中第一个文档和最后一个文档的详细信息。

1 个答案:

答案 0 :(得分:0)

您可以通过以下聚合来实现:

db.collection.aggregate([{
    $group: {
      _id: "$Dept_Name",
      docs: {
        $addToSet: "$$CURRENT"
      },
      count: {
        $sum: 1
      }
    }
  },
  {
    $match: {
      "count": {
        "$eq": 1
      }
    }
  },
  {
    $unwind: "$docs"
  },
  {
    $replaceRoot: {
      newRoot: "$docs"
    }
  }
])

首先想到$group,然后通过$addToSet保留对象。 然后对计数为1的那些过滤(通过$match),然后对$ unwind和$replaceRoot进行过滤。

看到它正常工作here