arrays - 在数组字段中查找具有重复值的 mongo 记录
问题描述
考虑这个 mongo 集合:
[{
"_id": {
"s": "HU",
"k": 1
},
"boxed": {
"values": [{
"s": "NL",
"k": 2
},
{
"s": "BR",
"k": 3
},
{
"s": "NL",
"k": 2
}
]
}
},
{
"_id": {
"s": "FR",
"k": 2
},
"boxed": {
"values": [{
"s": "SE",
"k": 99
}]
}
},
{
"_id": {
"s": "UA",
"k": 14
},
"boxed": {}
}
]
我基本上是在尝试找到重复的记录boxed.values
。一个这样的例子是第一个例子,NL*2
它重复了两次。
我的第一个想法是投影数组的原始大小values
,用于$map
将该对象数组转换为字符串数组(例如$map: { input: "$boxed.values", in: { $concat: ["$$this.s", "*", "$$this.k"] } }
),然后从字符串数组中删除重复项,这样我就可以将原始大小与删除一个。如果大小不同,则意味着该记录有重复。
但是,似乎在 mongo(或者至少我还没有找到)中没有办法轻松地从字符串数组中删除重复的值。
有任何想法吗?
解决方案
你可以做这样的事情,
[
{
$unwind: "$boxed.values"
},
{
$group: {
_id: "$_id",
"values": {
$addToSet: "$boxed.values"
}
}
},
{
$addFields: {
"boxed.values": "$values"
}
}
]
工作Mongo 游乐场。$addToSet
是一个删除重复项的数组操作
推荐阅读
- python - Openpyxl & Python - 将两列单元格中的数据组合成一列
- python - 如何使用 Django Environ 访问 Django 中的环境变量?
- javascript - 使用 Enzyme 将 redux 操作作为道具传递
- javascript - 使用捆绑器后无法加载资源错误
- javascript - 多级嵌套列表
- sql - 如何在 Rails 中正确编写 SQL 查询
- sql - 按上次活动时间排序,但按性别加权
- security - 哪个对 cookie 更安全:__Host 前缀还是设置域?
- python - 在numpy中识别具有最大值的数组,元素明智
- c++ - 为什么 gcc 在这里从回调函数的最后一个参数推断类型?