如何解决MongoDB计算2个子文档中的字段并生成新文档
我有一个集合,其中包含2个子文档fsgeneral
和balancesheet
。为了计算不同fye
的帐面价值,我将取值balancesheet.shareholderFund
/ fsgeneral.dilutedShares
。
问题是可以使用聚合来做到这一点,如何实现?
我的输入集合如下:
{
"counter": "APPLE","fsgeneral": {
"0": {
"fye": "Mar-01","dilutedShares": {
"value": 10
}
},"1": {
"fye": "Mar-02","dilutedShares": {
"value": 10
}
}
},"balancesheet": {
"0": {
"fye": "Mar-01","shareholderFund": {
"value": 200
}
},"shareholderFund": {
"value": 400
}
}
}
预期结果:
{
"counter": "APPLE","output": {
"0": {
"fye": "Mar-01","bookvalue": {
"value": 20
}
},"bookvalue": {
"value": 40
}
}
}
}
我尝试了一些汇总,但未能说明如何同时使用2个子文档。
解决方法
您可以尝试
-
$objectToArray
将对象转换为数组并输入$map
中,$ map会循环循环, -
$reduce
迭代fsgeneral
的循环并用balancesheet
检查键匹配,然后使用$divide
除 -
$arrayToObject
,$map
将返回数组,这将再次转换为对象
db.collection.aggregate([
{
$project: {
counter: 1
output: {
$arrayToObject: {
$map: {
input: { $objectToArray: "$balancesheet" },as: "a",in: {
k: "$$a.k",v: {
fye: "$$a.v.fye",bookvalue: {
value: {
$reduce: {
input: { $objectToArray: "$fsgeneral" },initialValue: 0,in: {
$cond: [
{ $eq: ["$$this.k","$$a.k"] },{ $divide: ["$$a.v.shareholderFund.value","$$this.v.dilutedShares.value"] },"$$value"
]
}
}
}
}
}
}
}
}
}
}
}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。