2017-01-24 3 views
1

В стадии проекта агрегации в Монго, я хотел бы создать логическое поле, как:тестовый проект Монго, если значение в массиве

{ 
    $project: { 
    isInArray: { $cond: [ 
     { $in: ['$_id', ids] }, 
     { $const: true }, 
     { $const: false }, 
    ] }, 
    }, 
}, 

, но это не удается с

invalid operator $in 

Я не мог найти документацию на правильный синтаксис

ответ

2

Вы можете использовать $setIsSubset оператор

db.people.aggregate([ 
{ $project: { 
    isInArray: { $cond: [ {$setIsSubset: [['$_id'], ids]}, true, false ] } 
}} 
]) 
+1

Отлично работает, спасибо! – Guig

+0

Знаете ли вы, есть ли недостатки производительности, например, есть ли индекс в '_id', который не может быть использован этим? – Guig

+1

@Guig afaik aggregation может использовать индексы только для операции $ match, если она идет первой –

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