例如,如果我有一个看起来像这样的文档:
{
"a" : "val",
"b" : "another val"
}
我如何翻转指定的字段,以便结果看起来像
{
"b" : "val",
"a" : "another val"
}
我已经尝试过db.collection.update({}, {$rename:{'a':'b', 'b':'a'}})
但是出现错误Field name duplication not allowed with modifiers
这是一个经典的硬币洗牌问题。上面可能遗漏的是,field
当您试图一步一步形成此更新时,总是会碰到指定的相同内容。从逻辑上讲,您将必须分多个步骤进行操作:
db.collection.update({}, {$rename: { 'a': 'c' }})
db.collection.update({}, {$rename: { 'b': 'a' }})
db.collection.update({}, {$rename: { 'c': 'b' }})
但是我们可以做得更好,并且分两步避免碰撞
db.collection.update({}, {$rename:{ 'a': 'c', 'b': 'd' }})
db.collection.update({}, {$rename:{ 'c': 'b', 'd': 'a' }})
当然,这不是一个操作,它是不容易的,没有你不能引用另一个字段的值,并将其更新到另一个。
当然,只有在确实需要更改字段名称的情况下才这样做。在$重命名手册包括用例。如果您只想以这种方式查看内容,只需对所需的表单进行$ project即可:
db.collection.aggregate([{$project: { a: "$b", b: "$a" }}])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句