繁体   English   中英

MongoDB:仅获取作为文档属性存在的数组中的第一个子文档

[英]MongoDB: get only the first sub-document inside an array which is present as attribute of a document

我收集了此类文档:

{
    "_id": {
        "$oid": "6047b855a6ce7d24a4cda693"
    },
    "address": "Bergamo, Via S. Bernardino, 57",
    "products": [{
        "productId": "6047b855a6ce7d24a4cda694",
        "qty": 7,
        "alarmTh": 5
    }, {
        "productId": "6047b855a6ce7d24a4cda695",
        "qty": 5,
        "alarmTh": 5
    }],
    "_class": "warehouseservice.team2.warehouseservice.models.Warehouse"

}

我需要找到具有特定 productId 的产品。 假设我想要 Id = 6047b855a6ce7d24a4cda694 的 object,我想要的结果如下:

{
    "productId": "6047b855a6ce7d24a4cda694",
    "qty": 7,
    "alarmTh": 5
}

我试过这个:

db.warehouse.find({"products.productId": "6047b855a6ce7d24a4cda694"}, {"products.$": 1, _id: 0})

但这会返回:

{ products: [ { productId: '6047b855a6ce7d24a4cda694', qty: 7, alarmTh: 5 } ] }

所以一个数组,但我只想要一个 object。

谢谢

您可以使用聚合管道和$replaceRoot

db.collection.aggregate([
  {
    "$match": {
      "products.productId": "6047b855a6ce7d24a4cda694"
    }
  },
  {
    "$project": {
      products: {
        "$first": "$products"
      }
    }
  },
  {
    "$replaceRoot": {
      "newRoot": "$products"
    }
  }
]);

Output:

[
  {
    "alarmTh": 5,
    "productId": "6047b855a6ce7d24a4cda694",
    "qty": 7
  }
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM