文档菜单
文档首页
/
MongoDB 手册
/ / /

包含周期的字段名称

本页内容

  • 插入包含周期的字段名称
  • 查询包含周期的字段
  • 更新包含周期的字段
  • 了解更多

本节总结如何插入、查询和更新包含周期字段名称的文档。

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

以下命令插入包含字段名称的文档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 }
}
]

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

返回

美元符号