arrays - 更改 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
}
提前谢谢了
解决方案
你只需要在$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
}
]
在这里检查
推荐阅读
- mongodb - Quartz-Mongo Db Integration-索引创建问题
- c++ - 在 C++ 中,构造函数和运算符的顺序是什么?
- python - 在 Pandas 数据框中创建条件列
- ubuntu - OpenVINO 无法检测到 GPU
- javascript - 给定的邮递员测试值与预期结果匹配,但仍然出现错误
- ios - 如何在 iOS 上使用带有 React Native 的 WebView 中的捆绑字体?
- loops - 为什么我在循环中的参数没有更新
- python - 日志中的 Jinja 模板呈现与返回的响应不同
- python - 如何使用 pandas python 或 excel 替换特定数据
- python - 火炬 | 得到“RuntimeError: Found dtype Long but expected Float”