在MongoDB中使用计算字段主要有以下几种方式:
- 在查询时使用$expr操作符进行字段计算。
- 这将计算后的结果作为一个虚拟字段返回。
db.products.find( { $expr: { $gt: [ "$price", "$discount" ] } } )
- 在聚合管道中的$addFields阶段添加计算字段。
- 这会将计算结果作为一个新字段添加到文档中。
db.orders.aggregate([
{ $match: { status: "A" } },
{
$addFields: {
subtotal: { $multiply: [ "$quantity", "$price" ] },
tax: { $multiply: [ "$subtotal", 0.06 ] }
}
}
])
- 使用MapReduce进行复杂的字段计算和结果聚合。
- 需要编写map和reduce函数来实现计算逻辑。
- 使用基于阶段的聚合或$graphLookup进行跨集合JOIN并添加计算字段。
- 这可以实现关系数据的计算结果聚合。
db.orders.aggregate([
{
$lookup: {
from: "products",
localField: "productId",
foreignField: "id",
as: "products"
}
},
{ $unwind: "$products" },
{
$addFields: {
"quantity * price": {
$multiply: [ "$quantity", "$products.price" ]
}
}
}
])
- 在更新操作($set)中设置计算字段。
- 这会直接将计算结果更新到文档中。
db.products.updateMany(
{ $expr: { $gt: [ "$discount", 20 ] } },
{
$set: {
"margin": { $subtract: [ "$price", "$cost" ] }
}
}
)
- 编写服务器端脚本(JavaScript)执行复杂的字段计算。
- 使用db.eval()执行JavaScript代码直接操作数据库。