簡體   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