mongodb - 从 MongoDB 中的所有对象中获取一些值
问题描述
我有一个关于从 mongo db 中获取特定数据的问题。数据库中的数据非常大,其中有很多对象。这些对象具有以下架构:
{
"_id": ObjectId("XXXX"),
"app_id": "XXXXXX",
"title": "The title",
"os": "OS",
"crash": [{
"crash_reason": {
"updated_at": "2018-06-28T03:39:47Z",
...many values ...
},
"crashes": [{
...many values ...
},
{
...many values ...
}],
"status": "success",
}, {
"crash_reason": {
"updated_at": "2018-06-28T03:39:46Z",
...many values ...
},
"crashes": [{
...many values ...
},
{
...many values ...
}],
"status": "success",
}],
"status": "success",
}
所以...要获取所有对象,我只是使用我的数据库,然后执行以下操作:
db.crashes.find()
但是,我想获取所有对象,但只能获取特定数据。输出应如下所示(如果可能)。
{
"_id": ObjectId("XXXX"),
"app_id": "XXXXXX",
"title": "the title",
"os": "OS",
"crash": [{
"crash_reason": {
"updated_at": "2018-06-28T03:39:47Z" }
}]
}
可悲的是,我是 mongo 的新手,并尝试通过文档找到解决方案,但没有成功。我尝试了很多东西,例如:
db.crashes.find([{$group:{app_id: "$app_id",title: "$title",os: "$os", crash: { $first: "$updated_at" }}}])
db.crashes.aggregate([{$group:{app_id: "$app_id",title: "$title",os: "$os", crash: { $first: "$updated_at" }}}])
有可能吗?我也会对以下输出感到满意:-D
{
"_id": ObjectId("XXXX"),
"app_id": "XXXXXX",
"title": "the title",
"os": "OS",
}
有人可以帮帮我吗?:-)
解决方案
尝试以下aggregate
查询以返回具有预期字段的最新子文档数据,
db.crashes.aggregate([
{$unwind: '$crash'},
{$sort: {'crash.crash_reason.updatedAt': -1}},
{$group: {
_id: "$_id",
app_id:{$first:"$app_id"},
title: {$first:"$title"},
os: {$first:"$os"},
crash: {$first: "$crash.crash_reason"}
}}
])
推荐阅读
- kotlin - 我在 kotlin 中有两个字符串列表,如何将第一个列表的每个元素与第二个列表的元素连接到相应的位置?
- eclipse - Eclipse Maven 终端
- jsonata - JSONata 转换脚本,用于获取源代码,并进行一些覆盖/修改
- sql-server - full 和 diff 数据库大小之间的区别是否有意义?
- javascript - JS 中的简单 z-buffer 实现示例?[初学者]
- java - 如何在 Eclipse 中创建 Spring 项目?
- javascript - 遍历我的嵌套嵌入文档中的对象
- xamarin.forms - 如何使用 xamarin 表单在 Picker 下拉弹出列表中添加图标
- python - 使用默认凭据调用 Cloud Function/Cloud Run
- generics - 编译器无法通过 where 子句推断泛型类型