Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

带句点的字段名称

在此页面上

  • 插入带句点的字段名称
  • 查询包含句点的字段
  • 更新包含句点的字段
  • 了解详情

本节总结了如何插入、查询并更新字段名称包含句点的文档。

要插入包含带句点的字段名称的文档,请将字段名称放入引号。

以下命令将插入一个包含字段名称 price.usd的文档:

db.inventory.insertOne(
{
"item" : "sweatshirt",
"price.usd": 45.99,
"quantity": 20
}
)

要查询包含句点的字段,请使用 $getField操作符。

以下查询返回 price.usd 字段大于 40 的文档:

db.inventory.find(
{
$expr:
{
$gt: [ { $getField: "price.usd" }, 40 ]
}
}
)
[
{
_id: ObjectId("66145f9bcb1d4abffd2f1b50"),
item: 'sweatshirt',
'price.usd': 45.99,
quantity: 20
}
]

如果您不使用 $getField,MongoDB 会将带有句点的字段名称视为嵌入式对象。例如,以下查询匹配price字段内的usd字段大于 40 的文档:

db.inventory.find( {
"price.usd": { $gt: 40 }
} )

前面的查询将与此文档匹配:

{
"item" : "sweatshirt",
"price": {
"usd": 45.99
},
"quantity": 20
}

要更新包含句点的字段,请使用带有 $setField 操作符的聚合管道。

以下操作将 price.usd 字段设置为 29.99

db.inventory.updateOne(
{ "item": "sweatshirt" },
[
{
$replaceWith: {
$setField: {
field: "price.usd",
input: "$$ROOT",
value: 29.99
}
}
}
]
)

如果您不使用 $setField,MongoDB 会将带有句点的字段名称视为嵌入式对象。例如,以下操作不会更新现有的 price.usd 字段,而是插入一个新字段 usd,嵌入在 price 字段中:

db.inventory.updateOne(
{ "item": "sweatshirt" },
{ $set: { "price.usd": 29.99 } }
)

正在生成文档:

[
{
_id: ObjectId("66145f9bcb1d4abffd2f1b50"),
item: 'sweatshirt',
'price.usd': 45.99
quantity: 20,
price: { usd: 29.99 }
}
]

有关使用聚合管道进行更新的更多示例,请参阅使用聚合管道进行更新。

后退

美元符号