首页 > 解决方案 > 更改 MongoDB 中集合的根元素

问题描述

我正在使用 MongoDB,并有以下数据和 500 个文档。这是一个示例:

{ 
    "_id" : "17254", 
    "post_meta" : {
        "country" : "NZ", 
        "city" : "Christchurch", 
        "latlng" : {
            "lat" : -43.5320544, 
            "lng" : 172.6362254
        }, 
        "around" : "", 
        "likes" : NumberInt(0), 
        "type" : "", 
        "lang" : "de"
    }, 
    "post_blog_r" : DBRef("blogs", "3885", "bicore"), 
    "post_blog" : {
        "ref" : "blogs", 
        "id" : "3885", 
        "db" : "bicore"
}
{ 
    "_id" : "17256", 
    "post_meta" : {
        "country" : "NZ", 
        "city" : "Christchurch", 
        "latlng" : {
            "lat" : -43.5320544, 
            "lng" : 172.6362254
        }, 
        "around" : "", 
        "likes" : NumberInt(0), 
        "type" : "", 
        "lang" : "de"
    }, 
    "post_blog_r" : DBRef("blogs", "3885", "bicore"), 
    "post_blog" : {
        "ref" : "blogs", 
        "id" : "3885", 
        "db" : "bicore"
}
{ 
    "_id" : "17258", 
    "post_meta" : {
        "country" : "NZ", 
        "city" : "Lake Tekapo", 
        "latlng" : {
            "lat" : -44.0046736, 
            "lng" : 170.4771212
        }, 
        "around" : "", 
        "likes" : NumberInt(0), 
        "type" : "", 
        "lang" : "de"
}

我想在单独的列中获得仅包含经度(lng)和纬度(lat)的表格,如下所示:

我设法像这样显示表格:

这就是 JSON 视图中的内容:

{ 
    "_id" : "17254", 
    "post_meta" : {
        "latlng" : {
            "lat" : -43.5320544, 
            "lng" : 172.6362254
        }
    }
}
{ 
    "_id" : "17256", 
    "post_meta" : {
        "latlng" : {
            "lat" : -43.5320544, 
            "lng" : 172.6362254
        }
    }
}
{ 
    "_id" : "17258", 
    "post_meta" : {
        "latlng" : {
            "lat" : -44.0046736, 
            "lng" : 170.4771212
        }
    }
}

但是,我希望有两个单独的列,其中包含 lng 和 lat 信息,而没有 post_meta 级别。我尝试使用 $unwind 命令。不幸的是,它没有用。这就是代码,我已经写了:

    use Neuseeland;
db.posts_nz_mongoexport.find({}, 
    { 
        "post_meta.latlng" : NumberInt(1)
    }
);

是否可以在单独的列中显示经度和纬度并将数据保存为新集合?输出应如下所示:

{ 
    "_id" : ObjectId("5b4908c71c93b41888ed83ab"), 
    "lat" : -43.5320544, 
    "lng" : 172.6362254
}
{ 
    "_id" : ObjectId("5b4908c71c93b41888ed83ac"), 
    "lat" : -43.5320544, 
    "lng" : 172.6362254
}
{ 
    "_id" : ObjectId("5b4908c71c93b41888ed83ad"), 
    "lat" : -44.0046736, 
    "lng" : 170.4771212
}

提前谢谢了

标签: arraysmongodbmongodb-queryaggregation-framework

解决方案


你只需要在$replaceRoot这里

db.collection.aggregate([
  {
    $addFields: {
      "post_meta.latlng.country": "$post_meta.country",
      "post_meta.latlng.city": "$post_meta.city"
    }
  },
  {
    $replaceRoot: {
      newRoot: "$post_meta.latlng"
    }
  }
])

输出

[
  {
    "lat": -43.5320544,
    "lng": 172.6362254
  },
  {
    "lat": -43.5320544,
    "lng": 172.6362254
  },
  {
    "lat": -44.0046736,
    "lng": 170.4771212
  }
]

在这里检查


推荐阅读