mongodb - 使用monogdb查询语言从对象数组中提取最后一个值?
问题描述
我是Mongo的新手。新我的意思是几个小时的新。
基本上我有这个文档结构:
{
_id: ObjectId("614513461af3bf569fdc420e"),
item: 'postcard',
status: 'A',
size: { h: 10, w: 15.25, uom: 'cm' },
instock: [ { warehouse: 'B', qty: 15 }, { warehouse: 'C', qty: 35 } ]
}
如果可能的话,我想从instock
的最后一个元素中提取特定字段(即它的值)。在这种情况下,我只需要提取35
ieqty
字段。
我设法做到了:
db.offer.find( { _id: ObjectId("614513461af3bf569fdc420e") }, { instock: 1, _id: 0} )
结果是:
{ instock: [ { warehouse: 'B', qty: 15 }, { warehouse: 'C', qty: 35 } ] }
我不知道如何到达数组中的最后一个对象,而不是它的qty
字段,一切都需要作为单个查询。
解决方案
聚合解决方案
(需要 MongoDB 5,否则查询会更大一些)
询问
_id
与$match
舞台一起过滤- 获取 的最后一个元素
$instock
,然后是字段qty
- 项目只保留上述部分
*我们像在编程语言中那样做,获取最后一个元素,并获取一个字段值。
db.collection.aggregate([
{"$match": {"_id": ObjectId("614513461af3bf569fdc420e")}},
{
"$project": {
"_id": 0,
"qty": {"$getField": {"field": "qty","input": {"$last": "$instock"}}}
}
}
])
推荐阅读
- android - Android Studio Mac OS Catalina Gradle 权限问题无法删除文件:
- ios - 自动续订订阅中是否需要使用恢复按钮?
- javascript - .env 变量不是字符串,在尝试“构建”我的 Firebase 项目时?
- python - 使类中的方法对同时调用具有鲁棒性
- aem - 运行模式 AEM 的优先顺序
- javascript - 如何从函数中获取数组?
- yocto - 如何在 Yocto 中覆盖 .conf 文件
- firebase - 如何在 Firebase 数据库中嵌套数据?
- apache-kafka - Confluent 控制中心未启动
- javascript - 在 componentDidUpdate 错误中反应本机调用 setState