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

Finding the collection details if one field is 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" }

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

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

您可以通过此聚合实现此目的:

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

想法先到$group and at the same time keep the objects via $addToSet。 然后过滤(通过 $match) on those which count is 1 and then $unwind & $replaceRoot.

看看效果如何 here