mongodb中对象数组中2个数字之间的差异
我使用的mongodb具有以下结构mongodb中对象数组中2个数字之间的差异,mongodb,aggregate,Mongodb,Aggregate,我使用的mongodb具有以下结构 { "_id" : ObjectId("5a868d785e5436aeed0502c0"), "symbol" : "ABC", "values" : [ { "High" : 53.0, "Close" : 51.85, "Open" : 50.8 }, { "High" : 51.35, "Close" : 50.25, "Open
{
"_id" : ObjectId("5a868d785e5436aeed0502c0"),
"symbol" : "ABC",
"values" : [
{
"High" : 53.0,
"Close" : 51.85,
"Open" : 50.8
},
{
"High" : 51.35,
"Close" : 50.25,
"Open" : 50.35
}
]
}
我想计算close字段前两个元素的百分比变化
但在计算差异时
collection.values[0]。关闭-collection.values[1]。关闭
我得到的pricediff为null.PFB代码
db.getCollection('abc').aggregate(
{
$project:
{
symbol:1,
today: { $arrayElemAt: [ "$values.Close", 0 ] },
yesterday: { $arrayElemAt: [ "$values.Close", 1 ] },
pricediff: {
$subtract: [ "$today", "$yesterday" ]
}
}})
还有没有其他方法来计算2个值的百分比变化
谢谢…J任何新的(或重命名的)字段都不能在当前阶段中使用,只能在以后的阶段中使用
db.getCollection('abc').aggregate({
$项目:{
符号:1,,
今天:{
$arrayElemAt:[“$values.Close”,0]
},
昨天:{
$arrayElemAt:[“$values.Close”,1]
},
价格差异:{
//无法使用这些字段,因为它们是在此字段中创建的
//投影
$subtract:[“$today”、“$Dayed”]
}
}
})
由于新字段不能在创建的同一投影中使用,因此可以使用多个阶段或重复代码来访问要计算值的字段
使用两个投影阶段:
db.getCollection('abc').aggregate([{
$项目:{
符号:1,,
今天:{
$arrayElemAt:[“$values.Close”,0]
},
昨天:{
$arrayElemAt:[“$values.Close”,1]
}
}
}, {
$项目:{
符号:1,,
今天:1,,
昨天:1
价格差异:{
$subtract:[“$today”、“$Dayed”]
}
}
}
}]);
使用具有以下功能的单个投影台:
db.getCollection('abc').aggregate([{
$项目:{
符号:1,,
今天:{
$arrayElemAt:[“$values.Close”,0]
},
昨天:{
$arrayElemAt:[“$values.Close”,1]
},
价格差异:{
$let:{
变量:{
今天:{
$arrayElemAt:[“$values.Close”,0]
},
昨天:{
$arrayElemAt:[“$values.Close”,1]
}
},
在:{
$subtract:[“$$今天”,“$$昨天”]
}
}
}
}
}]);
使用单个投影舞台(但更简洁):
db.getCollection('abc').aggregate([{
$项目:{
符号:1,,
今天:{
$arrayElemAt:[“$values.Close”,0]
},
昨天:{
$arrayElemAt:[“$values.Close”,1]
},
价格差异:{
$subtract:[
{$arrayElemAt:[“$values.Close”,0]},
{$arrayElemAt:[“$values.Close”,1]}
]
}
}
}]);
百分比变化只是以计算差异的相同方式添加正确的公式。任何新的(或重命名的)字段都不能在当前阶段中使用,只能在以后的阶段中使用
db.getCollection('abc').aggregate({
$项目:{
符号:1,,
今天:{
$arrayElemAt:[“$values.Close”,0]
},
昨天:{
$arrayElemAt:[“$values.Close”,1]
},
价格差异:{
//无法使用这些字段,因为它们是在此字段中创建的
//投影
$subtract:[“$today”、“$Dayed”]
}
}
})
由于新字段不能在创建的同一投影中使用,因此可以使用多个阶段或重复代码来访问要计算值的字段
使用两个投影阶段:
db.getCollection('abc').aggregate([{
$项目:{
符号:1,,
今天:{
$arrayElemAt:[“$values.Close”,0]
},
昨天:{
$arrayElemAt:[“$values.Close”,1]
}
}
}, {
$项目:{
符号:1,,
今天:1,,
昨天:1
价格差异:{
$subtract:[“$today”、“$Dayed”]
}
}
}
}]);
使用具有以下功能的单个投影台:
db.getCollection('abc').aggregate([{
$项目:{
符号:1,,
今天:{
$arrayElemAt:[“$values.Close”,0]
},
昨天:{
$arrayElemAt:[“$values.Close”,1]
},
价格差异:{
$let:{
变量:{
今天:{
$arrayElemAt:[“$values.Close”,0]
},
昨天:{
$arrayElemAt:[“$values.Close”,1]
}
},
在:{
$subtract:[“$$今天”,“$$昨天”]
}
}
}
}
}]);
使用单个投影舞台(但更简洁):
db.getCollection('abc').aggregate([{
$项目:{
符号:1,,
今天:{
$arrayElemAt:[“$values.Close”,0]
},
昨天:{
$arrayElemAt:[“$values.Close”,1]
},
价格差异:{
$subtract:[
{$arrayElemAt:[“$values.Close”,0]},
{$arrayElemAt:[“$values.Close”,1]}
]
}
}
}]);
百分比变化只是以计算差异的相同方式添加正确的公式。这可以通过使用和以下算术运算符的单个管道完成:
db.getCollection('abc').aggregate([
{
"$addFields": {
"pricediff": {
"$subtract": [
{ "$arrayElemAt": ["$values.Close", 0] },
{ "$arrayElemAt": ["$values.Close", 1] }
]
},
"precentage_change": {
"$multiply": [
{
"$cond": [
{ "$eq": [{ "$arrayElemAt": ["$values.Close", 1] }, 0] },
1,
{
"$divide": [
{
"$subtract": [
{ "$arrayElemAt": ["$values.Close", 0] },
{ "$arrayElemAt": ["$values.Close", 1] }
]
},
{ "$arrayElemAt": ["$values.Close", 1] }
]
}
]
},
100
]
}
}
}
])
这可以通过使用和以下算术运算符的单个管道完成:
db.getCollection('abc').aggregate([
{
"$addFields": {
"pricediff": {
"$subtract": [
{ "$arrayElemAt": ["$values.Close", 0] },
{ "$arrayElemAt": ["$values.Close", 1] }
]
},
"precentage_change": {
"$multiply": [
{
"$cond": [
{ "$eq": [{ "$arrayElemAt": ["$values.Close", 1] }, 0] },
1,
{
"$divide": [
{
"$subtract": [
{ "$arrayElemAt": ["$values.Close", 0] },
{ "$arrayElemAt": ["$values.Close", 1] }
]
},
{ "$arrayElemAt": ["$values.Close", 1] }
]
}
]
},
100
]
}
}
}
])
计算百分比差异时;您的第二个引用不正确,即您正在调用collection.values[1]。请关闭,它应该是collection.values[1]。关闭它只是一个对我的操作方式的引用,也更正了这一点……在计算百分比差异时,实际的mongo DB代码低于此值;您的第二个引用不正确,即您正在调用collection.values[1]。请关闭,它应该是collection.values[1]。关闭这只是一个对我的操作方式的引用,也更正了这一点……实际的mongo DB代码低于回复感谢。但输出仅返回50条记录。任何从集合中检索所有记录的方法。谢谢回复。但输出仅返回50条记录。从集合中检索所有记录的任何方法。