重命名 MongoDB 集合中的字段

发布于

在MongoDB中,您可以在更新集合中的文档时重命名字段。

要重命名字段,请使用字段的当前名称和新名称调用运算符。这将重命名具有该名称字段的所有匹配文档中的字段。$rename

例

假设我们有一个包含以下文档的集合:employees

{ “_id” : 1, “name” : “Sandy”, “salary” : 55000 } { “_id” : 2, “name” : “Sarah”, “salary” : 128000 } { “_id” : 3, “name” : “Fritz”, “salary” : 25000 } { “_id” : 4, “name” : “Chris”, “salary” : 45000 } { “_id” : 5, “name” : “Beck”, “salary” : 82000 }

假设我们要将字段重命名为 .name``employee

我们可以这样做:

db.employees.updateMany( 
  { }, 
  { $rename: { "name": "employee" } } 
)

输出:

{ “acknowledged” : true, “matchedCount” : 5, “modifiedCount” : 5 }

现在,当我们使用该方法返回集合中的文档时,我们看到以下结果:[find()](https://database.guide/mongodb-find/ "MongoDB find()")

db.employees.find()

输出:

{ "_id" : 1, "salary" : 55000, "employee" : "Sandy" }
{ "_id" : 2, "salary" : 128000, "employee" : "Sarah" }
{ "_id" : 3, "salary" : 25000, "employee" : "Fritz" }
{ "_id" : 4, "salary" : 45000, "employee" : "Chris" }
{ "_id" : 5, "salary" : 82000, "employee" : "Beck" }

重命名多个字段

您可以通过用逗号分隔来重命名多个字段。

例:

db.employees.updateMany( 
  { }, 
  { $rename: { "employee": "e", "salary": "s" } } 
)

输出:

{ “acknowledged” : true, “matchedCount” : 5, “modifiedCount” : 5 }

以下是该集合现在的样子:

{ “_id” : 1, “e” : “Sandy”, “s” : 55000 } { “_id” : 2, “e” : “Sarah”, “s” : 128000 } { “_id” : 3, “e” : “Fritz”, “s” : 25000 } { “_id” : 4, “e” : “Chris”, “s” : 45000 } { “_id” : 5, “e” : “Beck”, “s” : 82000 }

嵌入式文档

您可以使用点表示法更新嵌入文档中的字段名称。

示例文档:

db.pets.findOne()

输出:

{
	"_id" : 1,
	"name" : "Wag",
	"details" : {
		"type" : "Dog",
		"weight" : 20,
		"awards" : {
			"Florida Dog Awards" : "Top Dog",
			"New York Marathon" : "Fastest Dog",
			"Sumo 2020" : "Biggest Dog"
		}
	}
}

让我们更新嵌入文档中的一些字段:

db.pets.updateMany( 
  { }, 
  { $rename: { 
      "details.type": "details.t", 
      "details.weight": "details.w",
      "details.awards": "details.a"
    } 
  } 
)

现在,当我们检查文档时,我们会看到以下内容:

db.pets.findOne()

输出:

{
	"_id" : 1,
	"name" : "Wag",
	"details" : {
		"a" : {
			"Florida Dog Awards" : "Top Dog",
			"New York Marathon" : "Fastest Dog",
			"Sumo 2020" : "Biggest Dog"
		},
		"t" : "Dog",
		"w" : 20
	}
}

我们还可以更新嵌入在嵌入式文档中的文档的字段名称:

db.pets.updateMany( 
  { }, 
  { $rename: { 
      "details.a.Florida Dog Awards": "details.a.fda",
      "details.a.New York Marathon": "details.a.nym",
      "details.a.Sumo 2020": "details.a.s2020"
    } 
  } 
)

让我们再次检查文档:

db.pets.findOne()

输出:

{
	"_id" : 1,
	"name" : "Wag",
	"details" : {
		"a" : {
			"fda" : "Top Dog",
			"nym" : "Fastest Dog",
			"s2020" : "Biggest Dog"
		},
		"t" : "Dog",
		"w" : 20
	}
}