Mam następujące dwa Objects
w kolekcji Mongo nazwie cars
:
{vendor: "BMW",
model: "325i",
class: "coupe",
equipment: [
{name: "airbag",
cost: 120
},
{name: "led",
cost: 170
},
{name: "abs",
cost: 150
}
]
}
{vendor: "Mercedes",
model: "C 250",
class: "coupe",
equipment: [
{name: "airbag",
cost: 180
},
{name: "esp",
cost: 170
},
{name: "led",
cost: 120
}
]
}
gram dookoła z nowej funkcji agregacji redact wprowadzonego w Mongo 2.6 Chcę wykonać zapytanie, aby uzyskać listę samochodów z filtrowanymi częściami sprzętu. Słowem: Dajcie mi wszystkie samochody typu coupe i tylko informacje o sprzęcie LED
i AIRBAG
.
Próbowałem to agregacji:
db.cars.aggregate(
[
{$match: {"class": "coupe"}},
{$redact:
{
$cond:
{
if: { $in : ["$name", ["airbag", "led"]]},
then: "$$DESCEND",
else: "$$PRUNE"
}
}
}
]
)
Ale to prowadzi do następującego błędu:
assert: command failed: { "errmsg" : "exception: invalid operator '$in'", "code" : 15999, "ok" : 0 } : aggregate failed
Co robię źle? Czy istnieje inny sposób na osiągnięcie celu.
Spodziewam się wrócić to wynikać z Mongo:
{vendor: "BMW",
model: "325i",
class: "coupe",
equipment: [
{name: "airbag",
cost: 120
},
{name: "led",
cost: 170
}
]
}
{vendor: "Mercedes",
model: "C 250",
class: "coupe",
equipment: [
{name: "airbag",
cost: 180
},
{name: "led",
cost: 120
}
]
}
Wszelkie sugestie, w jaki sposób to osiągnąć?
Cheers, Ralf
Chcesz użyć '$ setIsSubset' zamiast' $ in' podczas wykonywania agregacji (w tym redakcji) w MongoDB. Zobacz http://docs.mongodb.org/manual/reference/operator/aggregation/setIsSubset – Paul
Możesz użyć '$ filter' z' $ in' z wersji 3.4. Coś w stylu 'db.cars.aggregate ([ { " $ match ": { " klasa ":" coupe ", " equipment.name ": { " $ in ": [" poduszka powietrzna "," led " ] } } } { "$ addFields": { "urządzenie" { "$ filtr": { "wejście" "$ trwałe" "w": "trwałe" "warunkach": { "$ w": [ "$$ equipment.name" [ "poduszki powietrznej", "led"] ] } } } } } } ]) ' – Veeram