Я хочу вернуть ТОЛЬКО год из поля даты
, поэтому я сделал это, когда я вернул полную дату (Примечание: это часть агрегации, в которой массив «соединенных» объектов разматывается- поэтому я не могу просто сослаться на «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'"
Так что я застрял - я хочувернуть ГОД только даты (если это дата) и в основном игнорировать его, если это не дата ...
После публикации я пошел, чтобы подтвердить типполе в модели, и это строка, а не дата - так что проверка типа не сработает ... это может быть проблемой преобразования строки в дату, а затем в год.