我正在努力获取所有记录的值字段,并用下一个记录值减去它。 这是我的记录的样子:
{
"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/