2016-03-30 3 views
2

У меня есть две коллекции: Tests и Reports. Они связаны и Reports имеют полевые испытания с Test.id. Каждый документ Test имеет поле testers_count.Подсчет и матч похожие документы в одном запросе

Также я написал запрос, который должен возвращать только Tests с testers_count больше или равен count связанных Reports документов.

db.test.aggregate([ 
    { 
     $lookup: 
     { 
      from: 'reports', 
      localField: '_id', 
      foreignField: 'test', 
      as: 'reportsList' 
     } 
    }, 
    { 
     $match: { 
     "settings.testers_count": {$gte: {$size: "$reportsList"}} 
     } 
    } 
]) 

Проблема в том, что код не работает и не вызывает никаких ошибок.

+0

Является ли коллекция именем 'Отчеты' или' отчеты'? – Philipp

+1

@Blakes Вы правы, $ match является «неправильным». Насколько я понимаю, значение должно быть числом или строкой. Но это трудно понять без ошибок ( – pavolve

+1

Вот почему есть «ответ» на вопрос. '$ Match' не является правильным использованием в этом контексте. –

ответ

1

Довольно уверен, что вы на самом деле означает:

db.test.aggregate([ 
    { "$lookup": { 
    "from": "reports", 
    "localField": "_id", 
    "foreignField": "test", 
    "as": "reportsList" 
    }}, 
    { "$redact": { 
    "$cond": { 
     "if": { 
     "$gte": [ 
      "$settings.testers_count", 
      { "$size": "$reportsLIst" } 
     ] 
     }, 
     "then": "$$KEEP", 
     "else": "$$PRUNE" 
    } 
    }} 
]) 

Предположив, что $settings.testers_count фактически решает свойство «особой», и не является членом «массив».

Используется вместо $redact и «логическая» форма $gte для оценки.

Также оператор $size может использоваться только в таком оценочном выражении, которое допускает $redact. Оператор $match на самом деле такой же в концепции и синтаксисе оператора до .find(), поскольку он выполняет «запрос» и может действительно использовать только «операторы запроса» и нет рассчитанных логических выражений.

Это то, что $redact на самом деле для. Это форма «логического выражения» $match

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