[javascript] Mongoose에서 .populate ()를 사용하여 특정 필드를 반환합니다.

쿼리를 실행 한 후 MongoDB에서 JSON 값이 반환됩니다. 문제는 내 반품과 관련된 모든 JSON을 반환하고 싶지 않다는 것입니다. 문서 검색을 시도했지만 적절한 방법을 찾지 못했습니다. 나는 그것이 가능하다면 어떻게 될지, 그렇다면 그렇게하는 적절한 방법은 무엇인지 궁금했다. 예 : DB에서

{
    user: "RMS",
    OS: "GNU/HURD",
    bearded: "yes",
    philosophy: {
        software: "FOSS",
        cryptology: "Necessary"
    },
    email: {
        responds: "Yes",
        address: "rms@gnu.org"
    },
    facebook: {}
}

{
    user: "zuckerburg",
    os: "OSX",
    bearded: "no",
    philosophy: {
        software: "OSS",
        cryptology: "Optional"
    },
    email: {},
    facebook: {
        responds: "Sometimes",
        address: "https://www.facebook.com/zuck?fref=ts"
    }
}

사용자를 위해 존재하지만 다른 필드를 반환하지 않는 경우 필드를 반환하는 적절한 방법은 무엇입니까? 위의 예 [email][address]에서 RMS에 대한 [facebook][address]필드와 Zuckerburg에 대한 필드 를 반환하고 싶습니다. 이것은 필드가 null인지 찾으려고했지만 작동하지 않는 것 같습니다.

 .populate('user' , `email.address`)
  .exec(function (err, subscription){
    var key;
    var f;
    for(key in subscription){
      if(subscription[key].facebook != null  ){
          console.log("user has fb");
      }
    }
  }



답변

“필드 반환”이 무엇을 의미하는지 완전히 명확하지 않지만 lean()쿼리를 사용 하여 출력을 자유롭게 수정 한 다음 두 필드를 채우고 원하는 필드 만 유지하도록 결과를 후 처리 할 수 ​​있습니다.

.lean().populate('user', 'email.address facebook.address')
  .exec(function (err, subscription){
    if (subscription.user.email.address) {
        delete subscription.user.facebook;
    } else {
        delete subscription.user.email;
    }
  });


답변

채워진 문서에 대해 몇 개의 특정 필드 만 반환되도록하려면 필드 이름 구문을 두 번째 인수로 채우기 메서드에 전달하여이를 수행 할 수 있습니다.

Model
.findOne({ _id: 'bogus' })
.populate('the_field_to_populate', 'name') // only return the Persons name
...

Mongoose 채우기 필드 선택 참조


답변

이렇게 해보세요 :

User.find(options, '_id user email facebook').populate('facebook', '_id pos').exec(function (err, users) {


답변

이렇게 해보세요 :

applicantListToExport: function (query, callback) {
  this
   .find(query).select({'advtId': 0})
   .populate({
      path: 'influId',
      model: 'influencer',
      select: { '_id': 1,'user':1},
      populate: {
        path: 'userid',
        model: 'User'
      }
   })
 .populate('campaignId',{'campaignTitle':1})
 .exec(callback);
}


답변

이제 할 수있는 일은 다음과 같습니다.

  .populate('friends', { username: 1, age: 1})


답변

당신은 시도 :

Post.find({_id: {$nin: [info._id]}, tags: {$in: info.tags}}).sort({_id:-1})
.populate('uid','nm')
.populate('tags','nm')
.limit(20).exec();


답변

위의 답변을 보완하기 위해 모든 것을 포함 하고 특정 속성 만 제외 하려는 경우 다음을 수행 할 수 있습니다.

.populate('users', {password: 0, preferences: 0})