원하는 것은 데이터베이스에 대해 문서를 쿼리하고 필드가 설정되지 않은 경우 데이터베이스 대신 사용자 정의 값을 반환하는 것입니다.node.js/mongoDB : 필드가 null 인 경우 사용자 정의 값을 반환하십시오.
songs
의 콜렉션이 있는데이 중 일부는 pathToCover
으로 설정되어 있고 그렇지 않은 것이 있습니다. 이를 위해 URL을 구성 변수에 저장하는 자리 표시 자 이미지로 되돌리고 싶습니다.
express와 mongoose로 node.js와 mongoDB를 실행하고 있습니다.
나는 이것에 대한 최선의 접근 방법이 무엇인지 잘 모르겠습니다. 분명한 해결책은 문서를 쿼리 한 다음 콜백에서 반복하여 필드가 설정되어 있는지 확인하는 것입니다. 그러나 이것은 상당히 불필요하다고 느낍니다.
현재, 내 코드는 다음과 같습니다
exports.getByAlbum = function listByAlbum(query, callback) {
Song.aggregate({
$group: {
_id: '$album',
artists: { $addToSet: '$artist' },
songs: { $push: '$title' },
covers: { $addToSet: '$pathToCover'},
genres: { $addToSet: '$genre'},
pathToCover: { $first: '$pathToCover'}
}
},
function (err, result) {
if (err) return handleError(err);
result.forEach(function(album) {
if (album.pathToCover == null) {
album.pathToCover = config.library.placeholders.get('album');
}
})
callback(result);
});
}
이를위한 가장 좋은 방법은 무엇입니까?
미리 감사드립니다. 이 빈 문자열 인 경우
exports.getByAlbum = function listByAlbum(query, callback) {
var defaultCover = config.library.placeholders.get('album');
Song.aggregate(
[
{ "$group": {
"_id": "$album",
"artists": { "$addToSet": "$artist" },
"songs": { "$push": "$title" },
"covers": { "$addToSet": { "$ifNull": [ "$pathToCover", defaultCover ] } },
"genres": { "$addToSet": "$genre" },
"pathToCover": { "$first": { "$ifNull": [ "$pathToCover", defaultCover ] } }
}}
],
function (err, result) {
if (err) return handleError(err);
callback(result);
}
);
}
: 필드의 값 중 하나 null
또는 해제 가능성이 문서에서 누락
만약 여러분이 mongoose를 태그로 사용한다면, 스키마를 생성 할 때 기본값을 정의 할 수 있습니다 :'pathToCover : {type : String, 'default': 'path/to/somewhere'}' . – Protostome
하지만 기본 문자열을 데이터베이스에 쓰지 않습니까? 내가 피하려고하는 것. – ngmir