我正在使用 MongoDB Compass 進行查詢,同時搜索我繼承的大量資料,并且經常被要求為各個團隊生成資料報告,但檔案通常包含太多資料,無法輕松決議,所以我想盡可能減少被報告的資料
我有以下示例檔案
{
"_id": "123456",
"name": "Bob",
"date": "2022-07-01",
"fruit": [
{
"_id": "000001",
"foodName": "apple",
"colour": "red"
},
{
"_id": "000002",
"foodName": "apple",
"colour": "green"
},
{
"_id": "000003",
"foodName": "banana",
"colour": "yellow"
},
{
"_id": "000004",
"foodName": "orange",
"colour": "orange"
}
]
}
使用
db.people.find( { "fruit.foodName" : "apple" } )
回傳整個檔案
我想只搜索蘋果,以便得到結果:
{
"_id": "123456",
"name": "Bob",
"date": "2022-07-01",
"fruit": [
{
"_id": "000001",
"foodName": "apple",
"colour": "red"
},
{
"_id": "000002",
"foodName": "apple",
"colour": "green"
}
]
}
那可能嗎?
uj5u.com熱心網友回復:
您需要為此使用聚合并使用$filter運算子,您不能為此使用查詢語言的原因是因為它們的投影選項是有限的,并且只允許投影單個陣列元素,因為在您的情況下該陣列可以包含超過 1 個匹配的子檔案,它不會這樣做。
您可以在此處閱讀有關查詢語言預測的更多資訊
db.collection.aggregate([
{
$match: {
"fruit.foodName": "apple"
}
},
{
$addFields: {
fruit: {
$filter: {
input: "$fruit",
cond: {
$eq: [
"$$this.foodName",
"apple"
]
}
}
}
}
}
])
蒙戈游樂場
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/520162.html
上一篇:MongoDb通過多列聚合分組