【发布时间】:2022-01-06 13:21:44
【问题描述】:
在我的 mongo 集合中,我有一个数组,其中所有元素都必须是唯一的。 但是错误地,我添加了重复的元素。如何使数组元素不同? 有查询/命令吗?
集合中的文档:
{
Tags: ["a", "a", "a"]
}
但我想要:
{
Tags: ["a"]
}
【问题讨论】:
在我的 mongo 集合中,我有一个数组,其中所有元素都必须是唯一的。 但是错误地,我添加了重复的元素。如何使数组元素不同? 有查询/命令吗?
集合中的文档:
{
Tags: ["a", "a", "a"]
}
但我想要:
{
Tags: ["a"]
}
【问题讨论】:
对于 mongo 4.2+ 版本,您可以将pipelined updates 与$setUnion 结合使用,如下所示:
db.collection.updateMany({},
[
{
$set: {
Tags: {
$setUnion: "$Tags"
}
}
}
])
【讨论】:
【讨论】:
这看起来是从 mongo shell 中清除重复项的好选择:
db.collection.aggregate([
{ "$project": {
"Tags": { "$setUnion": [ "$Tags", [] ] },
"same": { "$eq": [
{ "$size": "$Tags" },
{ "$size": { "$setUnion": [ "$Tags", [] ] } }
]}
}},
{ "$match": { "same": false } }
]).forEach(function(doc) {
db.collection.update(
{ "_id": doc._id },
{ "$set": { "Tags": doc.Tags } }
)
})
解释:
【讨论】: