2016-09-09 3 views
1

я решил такую ​​же проблему, автор этого вопроса было с решением другой парень, публикуемую в ответ: Unwind empty array in mongodbMongoDB Совокупные Project + разматывает пустой массив

В эти дни я обновил свой MongoDB/мангуста, и теперь я получает сообщение об ошибке:

MongoError: поле верхнего уровня _id является единственным полем в настоящее время поддерживается для исключения

Похоже монго пытается это поле «исключить» из проекта в настоящее время из-за значение- ,

Мне нужно добавить массив с объектом с {значением: 0}, потому что иначе этот объект будет проигнорирован после размотки.

{ $match: parameter}, 
    { $unwind : "$items" }, 
    { $project: { 
    itemName: '$items.name'}, 
    itemValue : "$items.value", 
    discount : { $cond : [ { $eq : ["$items.discounts", [] ]}, [ { value : 0} ], '$items.discounts'] } 
    }}, 
    { $unwind: "$discount"}, 

Есть ли другие/более новые решения этой проблемы? Спасибо за помощь.

+0

Можете ли вы изменить свой вопрос, чтобы включить некоторые примеры документов для тестирования и ожидаемый результат из этих документов? – chridam

ответ

0

Я не очень понимаю вашу проблему, сначала я бы изменить агрегацию на:

{ $match: parameter}, 
    { $unwind : "$items" }, 
    { $project: { 
    itemName: '$items.name'}, 
    itemValue : "$items.value", 
    discount : { $cond : [ { $eq : ["$items.discounts", []}, [ null ], '$items.discounts'] } 
    }}, 
    { $unwind: "$discount"} 

Вышеперечисленные работы для меня. Я бы посоветовал вам попробовать его с вашим любимым редактором или в mongoshell и проверить, работает ли он.

+0

Это сработало для меня, спасибо большое. –

Смежные вопросы