mongoDb - тестирование даты в агрегации - PullRequest
0 голосов
/ 28 июня 2019

Я хочу вернуть ТОЛЬКО год из поля даты

, поэтому я сделал это, когда я вернул полную дату (Примечание: это часть агрегации, в которой массив «соединенных» объектов разматывается- поэтому я не могу просто сослаться на «date_joined»))

$project: {
    _id:0,
    user_id: '$_id',
    date_joined: '$joined.date_joined',
    date_joined: { $year:'$joined.date_joined' }
}

, который мог бы отлично работать, если бы я требовал, чтобы дата была вставлена ​​- но для рассматриваемого случая, возможно, не будетdate - поле может быть пустым ... на самом деле это поле "STRING" - поэтому это может усложнить ситуацию.

, поэтому я получаю эту ошибку

Assert: command failed: {
    "operationTime" : Timestamp(1561736842, 1),
    "ok" : 0,
    "errmsg" : "can't convert from BSON type string to Date",
    "code" : 16006,
    "codeName" : "Location16006"
} : aggregate failed

Затем я попытался сделать$ cond, если мои данные типа 9 (дата) возвращают год, в противном случае возвращают пустую строку

$project: {
    _id:0,
    user_id: '$_id',
    date_joined: '$joined.date_joined',
    date_joined: {
    $cond: { 
        if: { 'joined.date_joined': { $type : 9 } }, 
        then: { $year:'$joined.date_joined' }, 
        else: '' 
        }
    }
}

Возможно, я неправильно понял синтаксис - но в моем IF, как указано выше (без$) Я получаю эту ошибку

"errmsg" : "FieldPath field names may not contain '.'.",

, если я добавляю $

if: { '$joined.date_joined': { $type : 9 } }

Я получаю эту ошибку

"errmsg" : "Unrecognized expression '$joined.date_joined'"

Так что я застрял - я хочувернуть ГОД только даты (если это дата) и в основном игнорировать его, если это не дата ...

После публикации я пошел, чтобы подтвердить типполе в модели, и это строка, а не дата - так что проверка типа не сработает ... это может быть проблемой преобразования строки в дату, а затем в год.

1 Ответ

0 голосов
/ 28 июня 2019

Я получил это, чтобы работать как:

$cond: { 
     if: { $ne : ['$joined.date_joined',''] }, 
     then: { $year: { $toDate: '$joined.date_joined' } }, 
     else: '' 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...