[英]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.