Вот пример документов я использую:
{
"_id" : ObjectId("554a1f5fe36a768b362ea5c0"),
"store_state" : 1,
"services" : [
{
"id" : "XXX",
"state" : 1,
"active": true
},
{
"id" : "YYY",
"state" : 1,
"active": true
},
...
]
}
Я хочу, чтобы вывести новое поле с «Y», если идентификатор «XXX» и активным является истинным и «N «в любых других случаях. Сервисный элемент с «XXX» как id отсутствует в каждом документе (в этом случае выводится «N»).
Вот мой запрос на данный момент:
db.stores.aggregate({
$match : {"store_state":1}
},
{ $project : {
"XXX_active": {
$cond: [ {
$and:[
{$eq:["services.$id","XXX"]},
{$eq:["services.$active",true]}
]},"Y","N"
] }
}
}).pretty()
Но это всегда выход "N"
для "XXX_active"
поле.
Ожидаемый выход мне нужно:
{
"_id" : ObjectId("554a1f5de36a768b362e7e6f"),
"XXX_active" : "Y"
},
{
"_id" : ObjectId("554a1f5ee36a768b362e9d25"),
"XXX_active" : "N"
},
{
"_id" : ObjectId("554a1f5de36a768b362e73a5"),
"XXX_active" : "Y"
}
Другой пример возможного результата:
{
"_id" : ObjectId("554a1f5de36a768b362e7e6f"),
"XXX_active" : "Y",
"YYY_active" : "N"
},
{
"_id" : ObjectId("554a1f5ee36a768b362e9d25"),
"XXX_active" : "N",
"YYY_active" : "N"
},
{
"_id" : ObjectId("554a1f5de36a768b362e73a5"),
"XXX_active" : "Y",
"YYY_active" : "Y"
}
только один XXX_active
на объект и не дублирует объекты, но мне нужны все объекты со XXX_active
, даже если идентификатор элемента «XXX» отсутствует. Может ли кто-нибудь помочь?
Можете ли вы показать нам ожидаемый выход? – chridam
Выход, который мне нужен: {"_id": ObjectId ("554a1f5de36a768b362e7e6f"), "XXX_active": "Y"} {"_id": ObjectId ("554a1f5ee36a768b362e9d25"), "XXX_active": "N"} { "_id": ObjectId ("554a1f5de36a768b362e73a5"), "XXX_active": "Y"} Только один XXX_активный объект. Спасибо –