node.js - MongoDB 查询将一个记录值与另一记录值相减

标签 node.js database mongodb

我正在努力获取所有记录的字段,并用下一个记录值减去它。 这是我的记录的样子:

{
  "name":"abc",
  "value":10
},
{
  "name":"xyz",
  "value":20
},
{
 "name":"pqr",
 "value":30
}

我已经通过这些查询来实现它,但没有得到所需的输出。

查询:

db.myc.aggregate([{
    $unwind: "$value"
}, {
    $group: {
        _id: "$name",
        value1: {
            $first: "$value"
        },
        value2: {
            $last: "$value"
        },
    }
}, {
    $project: {
        Output: {
            $subtract: ["$value1", 10]
        }
    }
}]);

得到如下输出:

{ "_id" : "abc", "Output" : 0 }
{ "_id" : "xyz", "Output" : 10 }
{ "_id" : "pqr", "Output" : 20 }

我正在寻找的所需输出,第一条记录应保持不变,即10,下一条记录值(20)应减去第三条记录值(30)。这样所有字段值将保持为 10。(输入数据始终与下一个数据有 10 的差异)。

任何人都可以告诉我如何实现它吗???

最佳答案

输入:

    {
         "_id" : ObjectId("5bf52fe30d11f12257d430bf"),
    "name" : "fff",
   "value" : 50
    },
   {
   "_id" : ObjectId("5bf52fe30d11f12257d430c0"),
    "name" : "gd",
   "value" : 60
   },
  {
  "_id" : ObjectId("5bf52fe30d11f12257d430c1"),
  "name" : "ffagf",
   "value" : 70
   }

使用以下查询来获取所需的输出:

注意:最高值最后会存储为0。

  db.myc.find().forEach(
  function(doc){
  var n = db.myc.findOne({_id:{"$gt":doc._id}}); 
  var diff = n.value-doc.value; 
   print(tojson(diff)); 
 });

输出:

10
10
0

引用这个答案:Link

关于node.js - MongoDB 查询将一个记录值与另一记录值相减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53405961/

相关文章:

node.js - 如何在node.js中正确使用Duplex流

encoding - 如何在 NodeJS 中对字符集编码进行编码/解码?

database - 我应该将每个数据库调用包装在事务中吗?

database - Codeigniter:使用语言助手和数据库的多语言

mysql - 从事件中选择不同的值

mysql - findOne 查询的 Mongodb 问题

node.js - 如何使用 bash 查看 process.env 的内容?

node.js - 安装 Node 模块时出错

mongodb - 从 csv 导入数据时如何更改 mongodb 中自动生成的 _id 字段?

node.js - 如何在 ovh 托管上使用 docker-compose