如何返回 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"] }
注意:
- 只检查内容,不检查大小写。
- 返回列表中的所有可能性
我尝试过的
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/