我想在我们的文档中重命名标记' tags
数组,例如将集合中的所有代码a
更改为c
。文件看起来像这样:
[ { _id: …, tags: ['a', 'b', 'c'] },
{ _id: …, tags: ['a', 'b'] },
{ _id: …, tags: ['b', 'c', 'd'] } ]
我需要保留标签唯一。这意味着,此类更新无效,因为第一个文档最终会包含标记c
两次:
db.docs.update(
{ tags: 'a' },
{ $set: { 'tags.$': 'c' } }
)
所以,我尝试了这个:
db.docs.update(
{ tags: 'a' },
{
$pull: { 'a' },
$addToSet: { 'c' }
}
)
但这会产生MongoError: Cannot update 'tags' and 'tags' at the same time
。
是否有机会通过一次更新重命名标签?
答案 0 :(得分:1)
根据official MongoDB documentation,无法在一组元素上表达“替换”操作。所以我想,在单次更新中没有办法做到这一点。
<强>更新强>: 经过一番调查后,我发现了this文件。如果我理解正确,您的查询应如下所示:
db.docs.update({
tags: 'a'
}, {
$set: { 'tags.$': 'c'}
})
其中'tags。$'表示匹配查询的“tags”数组中第一个元素的选择器,因此它将'a'的首次出现替换为'c'。据我了解,您的“标签”数组不包含重复项,因此首次匹配将是唯一匹配。