如何在聚合期间从另一个数组创建新数组?

曼塔斯·西兰斯卡斯

我有以下文件:

{
        "subscriptionIds" : [ 
            ObjectId("60c312c6dbb5a49fbbf560ea")
        ],
        "gps" : {
            "type" : "Point",
            "coordinates" : [ 
                23.942706, 
                54.932539
            ]
        },
        "online" : false,
        "suspended" : false,
        "hwModel" : "",
        "fw" : "",
        "lastSeen" : ISODate("2021-06-16T04:43:36.682Z"),
        "lastSimRequest" : ISODate("2021-06-16T04:34:59.749Z"),
        "lastLocation" : "LT",
        "lastLocationType" : "gps",
        "createdAt" : ISODate("2021-05-20T10:37:16.025Z"),
        "updatedAt" : ISODate("2021-06-11T07:37:56.981Z"),
        "notes" : "",
        "psk_seed" : "QTAebOeNP4nIs-JJSNNlkAQ78N_VaxOq98-_lQPCyZQ=",
        "lastOnline" : ISODate("2021-06-15T08:01:59.886Z"),
        "lastOffline" : ISODate("2021-06-16T04:43:36.682Z"),
        "onlineReason" : "deviceOnlineStatusFromAC",
        "offlineReason" : "deviceOfflineStatusTimeout",
        "allocationSettings" : "dataplan",
        "subscriptionDataplans" : [ 
            {
                "_id" : ObjectId("5fae82fc1224cc8d62b5bf17"),
                "organizationId" : ObjectId("5dd63d1c1d042f3018e8374e"),
                "organizationName" : "",
                "name" : "Naujas plan Telia 75GB",
                "enabled" : true,
                "contractsId" : [ 
                    ObjectId("5e32847ab8013befcc14bb1b"), 
                    ObjectId("5e32847ab8013befcc14bb1b")
                ],
                "simQuota" : 0,
                "periodQuota" : NumberLong(0),
                "allocationRules" : null,
                "createdAt" : ISODate("2020-11-13T12:58:36.650Z"),
                "updatedAt" : ISODate("2021-06-14T08:08:28.728Z"),
                "notes" : "",
                "allowRoaming" : false,
                "enablePriorityOrdering" : false,
                "priorityOrdering" : ""
            }, 
            {
                "_id" : ObjectId("5fcf25662b1c7d9bab8c1f7d"),
                "organizationId" : ObjectId("5dd63d1c1d042f3018e8374e"),
                "organizationName" : "",
                "name" : "London test",
                "enabled" : true,
                "contractsId" : [ 
                    ObjectId("5e5dfea1efcf754767408eae")
                ],
                "simQuota" : 0,
                "periodQuota" : NumberLong(0),
                "createdAt" : ISODate("2020-12-08T07:04:06.255Z"),
                "updatedAt" : ISODate("2021-06-15T09:28:07.472Z"),
                "notes" : "",
                "allowRoaming" : true,
                "enablePriorityOrdering" : false,
                "priorityOrdering" : ""
            }
        ],
    }

有没有办法使用“_id”和“allowRoaming”字段制作以下数组:

"dataplanRoaming": [
{
                "_id" : ObjectId("5fae82fc1224cc8d62b5bf17"),       
                "allowRoaming" : false,
            }, 
            {
                "_id" : ObjectId("5fcf25662b1c7d9bab8c1f7d"),
                "allowRoaming" : true,
            }
]

我最好的结果是,我尝试使用 project、addFields 等仍然无法获得我想要的结构。其余查询工作正常,只是缺少这部分

"dataplanRoaming" : [ 
        [ 
            false, 
            true
        ], 
        [ 
            ObjectId("5fae82fc1224cc8d62b5bf17"), 
            ObjectId("5fcf25662b1c7d9bab8c1f7d")
        ]
    ],

我希望这{$addFields:{dataplanRoaming:["$subscriptionDataplans.allowRoaming", "$subscriptionDataplans._id"]}},会给我想要的结果,它只是将数组与 _id 和 allowRoaming 作为单独的字段?有没有办法使用聚合等创建我想要的结果?

土生土长的
  • $map迭代循环subscriptionDataplans并返回所需的 feidls
db.collection.aggregate([
  {
    $addFields: {
      dataplanRoaming: {
        $map: {
          input: "$subscriptionDataplans",
          in: {
            _id: "$$this._id",
            allowRoaming: "$$this.allowRoaming"
          }
        }
      }
    }
  }
])

操场

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从另一个数组创建一个新数组?

如何使用另一个数组键创建新数组?

在 Javascript 中,如何使用另一个数组创建新数组

使用从另一个数组派生的项目创建一个新数组

从另一个数组中的项目创建一个新数组

如何使用另一个数组的行中的列创建一个新数组?[php]

如何在给定另一个数组的情况下创建一个 Matlab 数组

如何在不创建新数组的情况下用另一个数组扩展现有的JavaScript数组

如何在函数内创建一个数组,然后使用该数组创建另一个数组?

如何用另一个数组创建或填充一个numpy数组?

PHP:如何将另一个数组推送到一个数组,但没有为数组创建新值

从创建另一个数组的数组?

PHP从另一个数组创建数组

从另一个数组的元素创建数组

用另一个数组过滤一个数组并创建新对象?

使用 JavaScript 中的“reduce”从另一个数组创建新数组

如何在另一个数组中存储数组的对象元素个数?

如何将一个数组添加到另一个数组以创建一个数组数组。(JS)

如何在打字稿中创建另一个数组的排序索引数组?

AWK从另一个数组创建一个唯一值的新数组

如何在JavaScript中将一个数组推入另一个数组元素内作为新属性?

如何从另一个数组在新数组中添加值

将一个数组与另一个数组进行比较并根据差异创建一个新数组

将键从一个数组匹配到另一个数组,并使用它们的值创建一个新数组?

如何从另一个数组创建部分对象数组?

如何从另一个数组中的某些元素创建数组?

如何从另一个数组的对象属性创建数组

如何从数组中以块的形式存储数字并创建另一个数组或列表?

如何创建另一个数组的平方值数组