基本上我想减去每个对象的完成起点。
因此,在下面的示例中,输出应为2和4((7-5 = 2)和(8-4 = 4)),然后我要将这两个字段都添加到现有文档中。
如何在MongoDB中做到这一点?
{
"title" : "The Hobbit",
"rating_average" : "???",
"ratings" : [
{
"title" : "best book ever",
"start" : 5,
"finish" : 7
},
{
"title" : "good book",
"start" : 4,
"finish" : 8
}
]
}
答案 0 :(得分:1)
不确定查询输出的确切要求是什么,但这可能会有所帮助。
查询:
db.books.aggregate([
{ $unwind: "$ratings" },
{ $addFields: { "ratings.diff": { $subtract: [ "$ratings.finish", "$ratings.start" ] } } }
])
管道说明:
编辑:
OP要求将结果存储在同一子文档中。与朋友和家人讨论后,我发现这是可行的,但仅适用于MongoDB 4.2或更高版本。这是一条可以实现所需结果的更新语句。这是一个更新,而不是聚合。
更新 :(特定于MongoDB 4.2或更高版本)
db.books.update({
},
[
{
$replaceWith: {
ratings: {
$map: {
input: "$ratings",
in: {
start: "$$this.start",
finish: "$$this.finish",
diff: {
$subtract: [
"$$this.finish",
"$$this.start"
]
}
}
}
}
}
}
])