ich die folgenden zwei Objects
in einer Mongo Sammlung cars
benannt haben:
{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
}
]
}
Ich spiele um mit der neuen Funktion für die Aggregation redact in Mongo 2.6 eingeführt Ich möchte eine Abfrage durchführen, um eine Liste von Autos mit gefilterten Ausrüstungsteilen zu erhalten. In Worten: Gib mir alle Autos vom Typ Coupé und nur die Informationen über LED
und AIRBAG
Ausrüstung.
Ich habe diese Aggregationen versucht:
db.cars.aggregate(
[
{$match: {"class": "coupe"}},
{$redact:
{
$cond:
{
if: { $in : ["$name", ["airbag", "led"]]},
then: "$$DESCEND",
else: "$$PRUNE"
}
}
}
]
)
Aber das führt zu folgenden Fehler:
assert: command failed: { "errmsg" : "exception: invalid operator '$in'", "code" : 15999, "ok" : 0 } : aggregate failed
Was mache ich falsch? Gibt es einen anderen Weg, um das Ziel zu erreichen?
Ich würde erwarten, wieder dieses Ergebnis von Mongo zu erhalten:
{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
}
]
}
Vorschläge, wie dies zu erreichen?
Cheers, Ralf
Sie möchten '$ setIsSubset' anstelle von' $ in' verwenden, wenn Sie in MongoDB Aggregationen (einschließlich Redigieren) durchführen. Siehe http://docs.mongodb.org/manual/reference/operator/aggregation/setIsSubset – Paul
Sie können '$ filter' mit' $ in' von Version 3.4 verwenden. Etwas wie 'db.cars.aggregate ([ { " $ match ": { " klasse ":" coupe ", " equipment.name ": { " $ in ": [" airbag "," led " ] } } }, { "$ addFields": { "Ausrüstung": { "$ filter": { "Input": "$ Ausrüstung", "wie": "Ausrüstung", "cond": { "$ in": [ "$$ equipment.name", [ "Airbag", "geführt"] ] } } } } } ]) ' – Veeram