基本上,我想为每个对象减去finish-start。
因此,在下面的示例中,输出应该是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
}
]
}
发布于 2019-12-06 06:06:17
不确定查询输出的确切要求是什么,但这可能会有所帮助。
查询:
db.books.aggregate([
{ $unwind: "$ratings" },
{ $addFields: { "ratings.diff": { $subtract: [ "$ratings.finish", "$ratings.start" ] } } }
])
管道说明:
编辑:
OP要求将结果存储在同一个子文档中。在与朋友和家人讨论后,我发现这是可能的,但只有在MongoDB 4.2或更高版本中才有可能。下面是一条可以实现预期结果的update语句。这是一个更新,而不是一个聚合。
更新:(特定于MongoDB 4.2或更高版本)
db.books.update({
},
[
{
$replaceWith: {
ratings: {
$map: {
input: "$ratings",
in: {
start: "$$this.start",
finish: "$$this.finish",
diff: {
$subtract: [
"$$this.finish",
"$$this.start"
]
}
}
}
}
}
}
])
https://stackoverflow.com/questions/59202964
复制相似问题