首页 > 解决方案 > 使用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的最后一个元素中提取特定字段(即它的值)。在这种情况下,我只需要提取35ieqty字段。

我设法做到了:

db.offer.find( { _id: ObjectId("614513461af3bf569fdc420e") }, { instock: 1, _id: 0} )

结果是:

{ instock: [ { warehouse: 'B', qty: 15 }, { warehouse: 'C', qty: 35 } ] }

我不知道如何到达数组中的最后一个对象,而不是它的qty字段,一切都需要作为单个查询。

标签: mongodbnosql

解决方案


聚合解决方案
(需要 MongoDB 5,否则查询会更大一些)

询问

  • _id$match舞台一起过滤
  • 获取 的最后一个元素$instock,然后是字段qty
  • 项目只保留上述部分

*我们像在编程语言中那样做,获取最后一个元素,并获取一个字段值。

测试代码在这里

db.collection.aggregate([
{"$match": {"_id": ObjectId("614513461af3bf569fdc420e")}},
{
  "$project": {
  "_id": 0,
  "qty": {"$getField": {"field": "qty","input": {"$last": "$instock"}}}
  }
}
])

推荐阅读