将数组对象转换为简单数组mongodb聚合

时间:2019-07-11 18:49:16

标签: mongodb aggregation-framework

我在舞台上有这个单纯形阵列的例子

// Manual unlocking is done before notifying, to avoid waking up
// the waiting thread only to block again (see notify_one for details)
lk.unlock();
cv.notify_one();

我想在项目中得到这个输出

df[list_cols] = df[list_cols].fillna(0)

我正在尝试类似的事情

equipaments: [
  {id: 1, number: 1029393, card: 12333},
  {id: 2, number: 1029394, card: 12334},
  {id: 3, number: 1029395, card: 12335}
]

1 个答案:

答案 0 :(得分:2)

在这种情况下,应使用$map而不是$reduce来变换数组中的每个项目。 语法非常相似:

db.collection.aggregate([
  {
    $project: {
      "equipaments": {
        $map: {
          input: "$equipaments",
          as: "eqp",
          in: {
            $concat: [
              {
                $toString: "$$eqp.number"
              },
              "-",
              {
                $toString: "$$eqp.card"
              }
            ]
          }
        }
      }
    }
  }
])

如果numbercard存储为Int / Long / Double,则需要先将它们转换成字符串。请注意,$toString运算符需要MongoDB 4.0

输出:

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "equipaments": [
      "1029393-12333",
      "1029394-12334",
      "1029395-12335"
    ]
  }
]

在线试用:mongoplayground.net/p/u9FrF-OfdDf