Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB-减法_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

MongoDB-减法

MongoDB-减法,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,基本上,我想减去每个对象的“完成开始”。 因此,在下面的示例中,输出应该是2和4((7-5=2)和(8-4=4)),然后我想将这两个字段添加到现有文档中 我如何在MongoDB中做到这一点 { "title" : "The Hobbit", "rating_average" : "???", "ratings" : [ { "title" : "best book ever", "start" : 5,

基本上,我想减去每个对象的“完成开始”。
因此,在下面的示例中,输出应该是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
        }
    ]
}

不确定查询输出的具体要求是什么,但这可能会有所帮助

查询:

db.books.aggregate([
    { $unwind: "$ratings" },
    { $addFields: { "ratings.diff": { $subtract: [ "$ratings.finish", "$ratings.start" ] } } }
])
管道说明:

db.books.aggregate([
    { $unwind: "$ratings" },
    { $addFields: { "ratings.diff": { $subtract: [ "$ratings.finish", "$ratings.start" ] } } }
])
  • 展开数组,因为$subtract无法对数组数据执行操作
  • 在“评级”子文档中添加一个名为diff的新字段,该字段具有 计算值
  • 编辑:

    db.books.aggregate([
        { $unwind: "$ratings" },
        { $addFields: { "ratings.diff": { $subtract: [ "$ratings.finish", "$ratings.start" ] } } }
    ])
    
    OP要求将结果存储在同一子文档中。在与朋友和家人讨论后,我发现这是可能的,但只有MongoDB版本4.2或更高版本才有可能。下面是一个update语句,它可以实现所需的结果。这是一个更新,不是聚合

    更新:(特定于MongoDB 4.2或更高版本)


    这看起来不错,但如何将其保存到我的文档中?(在我现有的document@user12487929-为了澄清,您想从文档中的两个字段计算一个值,然后更新文档以包含此计算值?是的,我想计算(减去)文档中两个字段的值,然后更新文档以包含此计算值。您能找到任何解决方案吗?@user12487929-我仍在研究中。这个基本用例似乎很难解决。