仅从MongoDB中的所有对象中获取一些值
我有一个关于从mongo db中获取特定数据的问题。数据库中的数据非常大,其中有许多对象。这些对象具有以下体系结构:仅从MongoDB中的所有对象中获取一些值,mongodb,Mongodb,我有一个关于从mongo db中获取特定数据的问题。数据库中的数据非常大,其中有许多对象。这些对象具有以下体系结构: { "_id": ObjectId("XXXX"), "app_id": "XXXXXX", "title": "The title", "os": "OS", "crash": [{ "crash_reason": {
{
"_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()
但是,我想获取所有对象,但只获取特定数据。输出应该是这样的(如果可能的话)
遗憾的是,我是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",
}
有人能帮我吗?:-) 您需要投影您的数据() 试试这个:
db.crashes.find({}, {"app_id": 1, "title": 1, "os": 1})
如果要获取具有最新updatedAt
值的数组元素,可以使用以下管道:
db.crashes.aggregate([
{$unwind: '$crash'},
{$sort: {'crash.crash_reason.updatedAt': -1}},
{$group: {
_id: "$app_id",
title: {$first: "$title"},
os: {$first: "$os"},
crash: {$first: "$crash"}
}}
])
这将$unwind
崩溃数组(即,它将为每个崩溃数组元素创建一个文档),然后它将按照updatedAt
日期(最新的第一个日期)对所有文档进行排序。最后,它将根据app\u id
对所有文档进行分组,并获取第一个crash
值,这将是上一个$sort
阶段的最后一个值
如果您想进一步减少数据量,可以在聚合管道中的$group
阶段之前或之后添加$project
阶段(例如,您可以在第一阶段中删除所有不相关的数据,以获得更好的性能)
查看文档以获得更好的解释()尝试下面的
aggregate
query返回最新的子文档数据和预期字段
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"}
}}
])
魔兽世界的复制品很简单,而且很有效。链接到文档的thx。还有没有办法获得第一个“更新的地址”或这是不可能的?是的,谢谢。但我得到了一个“字段'title'必须是累加器对象”异常。我正在试图找出原因。对不起,您可以在
标题
和操作系统
上使用$first
操作符,我会更新答案。您好,非常感谢。它现在看起来与Amrut的解决方案几乎相同。遗憾的是,我得到了相同的异常:zsh:bad math expression:在{:}处需要操作数zsh:bad math expression:在{:{crash…'我正在尝试了解发生了什么,并希望能够修复它。我认为这不是查询的问题。如何连接到db?在Robo3T中运行它对我来说很好。嗨,也感谢你的帮助。但是我遇到了异常:zsh:糟糕的数学表达式:操作数应在{:}'zsh:错误的数学表达式:在
{:{crash….'处应为操作数。我也在尝试查找问题。抱歉,我犯了一个错误。现在它正在工作。许多THX需要帮助:-)
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"}
}}
])