mongodb - 如何查找数组中的重复元素(一个文档)?

标签 mongodb mongodb-query aggregation-framework

如何返回 MongoDB 中存在的数组中的重复元素(忽略大小写)?

输入(MongoDB中的文档)

 {
    "userID" : "USER001",
    "userName" : "manish",
    "collegeIDs" : [ 
        "COL_HARY", 
        "COL_MARY", 
        "COL_JOHNS", 
        "COL_CAS", 
        "COL_JAMES", 
        "col_mary", 
        "COL_JOHNS", 
        "COL_JOHNS"
    ]
}

预期输出:

{ "collegeIDs" : ["COL_MARY", "col_mary", "COL_JOHNS"] }

注意:

  1. 只检查内容,不检查大小写。
  2. 返回列表中的所有可能性

我尝试过的

db.myList.aggregate([
  {"$project": {"collegeIDs":1}},
  {"$unwind":"$collegeIDs"},
  {"$project": {"collegeIDs": {"$toLower": "$collegeIDs"}}},
  {"$group": {"_id":{"_id":"$_id", "cid":"$collegeIDs"}, "count":{"$sum":1}}},
  {"$match": {"count":{"$gt":1}}},
  {"$group": {"_id": "$_id._id", "collegeIDs": {"$addToSet":"$_id.cid"}}}
]) 

最佳答案

以下查询可以获得预期的输出:

db.check.aggregate([
    {
        $unwind:"$collegeIDs"
    },
    {
        $addFields:{
            "collegeIdToLower":{
                $toLower:"$collegeIDs"
            }
        }
    },
    {
        $group:{
            "_id":"$collegeIdToLower",
            "collegeIDs":{
                $addToSet:"$collegeIDs"
            },
            "count":{
                $sum:1
            }
        }
    },
    {
        $match:{
            "count":{
                $gt:1
            }
        }
    },
    {
        $unwind:"$collegeIDs"
    },  
    {
        $group:{
            "_id":"NO_ID",
            "collegeIDs":{
                $push: "$collegeIDs"
            }
        }
    },
    {
        $project:{
            "_id":0
        }
    }
]).pretty()

输出:

{
    "collegeIDs" : [
        "col_mary",
        "COL_MARY",
        "COL_JOHNS"
    ]
}

我们不会将实际的大学 ID 转换为较低的字符串,而是为其添加一个字段并用于分组。

关于mongodb - 如何查找数组中的重复元素(一个文档)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57379034/

相关文章:

javascript - 获取ID数组中所有具有匹配ID的元素

java - mongodb + mockito 不能一起工作?

node.js - MongoDB - 从架构模型中仅查找 bool 值为 false 的元素

node.js - 如何从 sails.js 中的多个集合中获取记录

来自空数组的 MongoDB 组不返回任何内容

mongodb - 是否可以在聚合框架 mongo 中按投影顺序获取字段

mongodb - 使用 Robomongo 连接到 Windows Azure VM 上的 mongoDB 服务器

haskell - Haskell 是否支持 MongoDB 的查询运算符,例如 "$in"?

c# - MongoDB 哈希表平均值

mongodb - MongoDB 聚合中的 $$ROOT 是什么以及它是如何工作的?