IT Share you

Mongoose : 단일 호출로 여러 쿼리 채우기

shareyou 2020. 12. 3. 20:50
반응형

Mongoose : 단일 호출로 여러 쿼리 채우기


Mongoose에서는 쿼리 채우기를 사용하여 쿼리 후 추가 필드를 채울 수 있습니다. 다음과 같이 여러 경로를 채울 수도 있습니다.

Person.find({})
 .populate('books movie', 'title pages director')
 .exec()

그러나 이것은 제목, 페이지 및 감독에 대한 필드를 수집하는 책에 대한 조회를 생성하고 제목, 페이지 및 감독에 대한 필드를 수집하는 영화에 대한 조회도 생성합니다. 내가 원하는 것은 책에서만 제목과 페이지를 얻고 영화에서 감독을 얻는 것입니다. 다음과 같이 할 수 있습니다.

Person.find({})
 .populate('books', 'title pages')
 .populate('movie', 'director')
 .exec()

예상 결과와 쿼리를 제공합니다.

그러나 첫 번째 스 니펫과 유사한 "한 줄"구문을 사용하여 두 번째 스 니펫의 동작을 가질 수있는 방법이 있습니까? 그 이유는 채우기 함수에 대한 인수를 프로그래밍 방식으로 결정하고 공급하기를 원하기 때문입니다. 여러 채우기 호출에 대해서는 그렇게 할 수 없습니다.


mongoose의 소스 코드를 살펴본 후 다음과 같이 해결했습니다.

var populateQuery = [{path:'books', select:'title pages'}, {path:'movie', select:'director'}];

Person.find({})
 .populate(populateQuery)
 .execPopulate()

다음과 같이 할 수도 있습니다.

{path:'user',select:['key1','key2']}

이것은 Mongoose JS 문서 http://mongoosejs.com/docs/populate.html을 기반으로 수행되는 방법입니다 .

사용자와 도서를 포함하는 BookCollection 스키마가 있다고 가정 해 보겠습니다. 쿼리를 수행하고 관련 사용자 및 도서와 함께 모든 BookCollection을 가져 오려면 다음을 수행합니다.

models.BookCollection
    .find({})
    .populate('user')
    .populate('books')
    .lean()
    .exec(function (err, bookcollection) {
    if (err) return console.error(err);
    try {
        mongoose.connection.close();
        res.render('viewbookcollection', { content: bookcollection});

    } catch (e) {
        console.log("errror getting bookcollection"+e);
    }

참고 URL : https://stackoverflow.com/questions/21069813/mongoose-multiple-query-populate-in-a-single-call

반응형