MongoDB 将元素字段仅转换为值数组

问题描述 投票:0回答:1

我需要有关 MongoDB 中以下操作的帮助,我想做的就是仅将评论中的标记获取到它自己的值数组中。

我到目前为止得到的代码:

db.lodging.aggregate([
    {$project:{
        reviews:"$host.reviews",host:"$host"
        }
    },
    {$unwind: "$reviews"},
])

JSON 示例:

 "host" : {
    "name" : "Grimes", 
    "surname" : "Terrell", 
    "gender" : "male", 
    "age" : NumberInt(55), 
    "picture" : "https://api.adorable.io/avatars/285/GrimesTerrell.png", 
    "reviews" : [
        {
            "reviewer" : "Mae Ryan", 
            "date" : "2015-06-01T02:41:46 -02:00", 
            "helpful" : NumberInt(8), 
            "kind" : NumberInt(1), 
            "responsive" : NumberInt(5)
        }, 
        {
            "reviewer" : "Nixon Johnson", 
            "date" : "2016-02-08T10:35:12 -01:00", 
            "helpful" : NumberInt(1), 
            "kind" : NumberInt(1), 
            "responsive" : NumberInt(9)
        }, 
    ]
}

这就是我想要实现的目标:

{
    "host" : {
    "name" : "Grimes", 
    "surname" : "Terrell", 
    "gender" : "male", 
    "age" : NumberInt(55), 
    "picture" : "https://api.adorable.io/avatars/285/GrimesTerrell.png", 
    "reviews" : [
        {
            "marks" : [8,1,5], 
        }, 
        {
            "marks" : [1,1,9], 
        }, 
    ]
}
arrays mongodb
1个回答
0
投票

假设您的标记字段名称始终为

helpful
kind
responsive
,您可以使用 $map

db.collection.aggregate([
  {
    $project: {
      host: {
        name: 1,
        surname: 1,
        gender: 1,
        age: 1,
        picture: 1,
        reviews: {
          $map: {
            input: "$host.reviews",
            as: "review",
            in: {
              "$concatArrays": [
                [
                  "$$review.helpful"
                ],
                [
                  "$$review.kind"
                ],
                [
                  "$$review.responsive"
                ]
              ]
            }
          }
        }
      }
    }
  }
])

这里有一个mongo游乐场供大家参考

© www.soinside.com 2019 - 2024. All rights reserved.