ho ottenuto il seguente due Objects
in una collezione denominata Mongo 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
}
]
}
Sto giocando intorno con la nuova funzione di aggregazione redact introdotta in Mongo 2.6 Voglio eseguire una query per ottenere un elenco di auto con parti di apparecchiature filtrate. In parole: Dammi tutte le auto del tipo coupé e solo le informazioni su LED
e AIRBAG
equipaggiamento.
Ho provato questo aggregazioni:
db.cars.aggregate(
[
{$match: {"class": "coupe"}},
{$redact:
{
$cond:
{
if: { $in : ["$name", ["airbag", "led"]]},
then: "$$DESCEND",
else: "$$PRUNE"
}
}
}
]
)
Ma che conduce alla seguente errore:
assert: command failed: { "errmsg" : "exception: invalid operator '$in'", "code" : 15999, "ok" : 0 } : aggregate failed
Quello che sto facendo di sbagliato? C'è un altro modo per raggiungere l'obiettivo.
mi aspetto di tornare questo risultato da 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
}
]
}
Qualche suggerimento su come raggiungere questo obiettivo?
Cheers, Ralf
Si desidera utilizzare '$ setIsSubset' invece di' $ in' quando si eseguono aggregazioni (inclusa la redazione) in MongoDB. Vedi http://docs.mongodb.org/manual/reference/operator/aggregation/setIsSubset – Paul
Puoi usare '$ filter' con' $ in' dalla versione 3.4. Qualcosa come 'db.cars.aggregate ([ { " $ match ": { " class ":" coupé ", " equipment.name ": { " $ in ": [" airbag "," led " ] } } }, { "$ addFields": { "attrezzature": { "$ Filtro": { "input": "$ equipaggiamento", "come": "equipaggiamento", "cond": { "$ in": [ "$$ equipment.name", [ "airbag", "led"] ] }} } } } ]) ' – Veeram