У меня есть две следующие Objects
в коллекции 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
}
]
}
Я играю с новой функцией агрегации redact, представленной в Mongo 2.6
Я хочу выполнить запрос, чтобы получить список автомобилей с отфильтрованными частями оборудования.
В словах: Дайте мне все автомобили типа купе и только информацию об оборудовании LED
и AIRBAG
.
Я пробовал эти агрегации:
db.cars.aggregate(
[
{$match: {"class": "coupe"}},
{$redact:
{
$cond:
{
if: { $in : ["$name", ["airbag", "led"]]},
then: "$$DESCEND",
else: "$$PRUNE"
}
}
}
]
)
Но это приводит к следующей ошибке:
assert: команда не выполнена: { "errmsg": "exception: недействительный оператор '$ in'", "code": 15999, "ok": 0}: aggregate failed
Что я делаю неправильно? Есть ли другой способ достижения цели.
Я ожидал бы вернуть этот результат от 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
}
]
}
Любые предложения о том, как достичь этого?
Cheers, Ralf