programing

Mongoose에서 .populate()로 특정 필드를 반환합니다.

abcjava 2023. 3. 27. 20:52
반응형

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]주커버그에 출전하다필드가 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()query는 출력을 자유롭게 수정한 후 두 필드를 모두 채우고 결과를 후처리하여 원하는 필드만 유지할 수 있도록 합니다.

.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 채우기 필드 선택" 참조

다음을 시도해 보십시오.

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);
}

다음을 시도해 보십시오.

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

여기서 할 수 있는 일은 다음과 같습니다.

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

다음 쿼리에서 조건에 맞는 기사를 검색했습니다.show=true검색된 데이터title and createdAt또한 기사 카테고리만 카테고리 제목과 ID를 검색합니다.

let articles = await articleModel
        .find({ show: true }, { title: 1, createdAt: 1 })
        .populate("category", { title: 1, _id: 1 });

단일 수준 채우기에 사용할 수 있습니다.-> populate('user','name email age')

내포 모집단의 경우

populate({
    path:'posts',
    populate({
         path:'user'
         select:'name email age'
    })
})

다음 작업을 수행합니다.

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

나는 이 문제에 대해 막혔다.블로그 포스트에 링크된 모집단 및 사용자 필드를 원했습니다.poople을 사용하면 암호를 포함한 모든 항목만 반환되었습니다.필드를 배열로 지정하면 정상적으로 동작합니다.

//간단하게 하기 위해 내보낸 코드

await Blog.findById(ID).populate("author", ["firstName", "lastName", 
"profilePicture", "_id"])

//

이것은 응답의 결과입니다.

대답

위의 답변을 보완하기 위해 모든 것을 포함하되 특정 속성만 제외하려면 다음을 수행합니다.

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

아래를 사용해 보세요.

 Model
    .find()
    .populate({path: 'foreign_field', ['_id', 'name']}) // only return the Id and Persons name
    ...

안녕하세요, 저는 이 코드를 사용하여 입력된 사용자 필드에 입력이 되었습니다. --->

async function displayMessage(req,res,next){
    try{
        let data= await Msg.find().populate("user","userName userProfileImg","User")
               if(data===null) throw "Data couldn ot be loaded server error"
        else {
            res.status(200).json(data)
        }
    }   catch(err){
            next(err)
    }
}

나는 직접 결과를 얻고 있다.여기서 userName, userProfile image 필드는 선택적으로 필요한 필드입니다.pulate 구문은 :--> 입니다.

 .populate("user field to populate","fields to display with spaces between each of them " , "modelName ")

모든 매개 변수는 반전 쉼표로 표시되어야 합니다.

아래는 제가 받은 출력입니다.게다가 서브 문서 ID 의 입력에 대해 걱정할 필요는 없습니다.이러한 정보는 자동적으로 취득할 수 있습니다.

[
    {
        "_id": "5e8bff324beaaa04701f3bb9",
        "text": "testing message route",
        "user": {
            "_id": "5e8bf062d3c310054cf9f293",
            "userName": "boss",
            "userProfileImg": "img"
        },
        "__v": 0
    },
    {
        "_id": "5e8bff8dd4368a2858e8f771",
        "text": "testing message route second",
        "user": {
            "_id": "5e8bf062d3c310054cf9f293",
            "userName": "boss",
            "userProfileImg": "img"
        },
        "__v": 0
    },
    {
        "_id": "5e8c0c08e9bdb8209829176a",
        "text": "testing message route second",
        "user": {
            "_id": "5e8bf062d3c310054cf9f293",
            "userName": "boss",
            "userProfileImg": "img"
        },
        "__v": 0
    },
    {
        "_id": "5e8c0e0bcb63b12ec875962a",
        "text": "testing message route fourth time",
        "user": {
            "_id": "5e8bf062d3c310054cf9f293",
            "userName": "boss",
            "userProfileImg": "img"
        },
        "__v": 0
    }
]

언급URL : https://stackoverflow.com/questions/26691543/return-certain-fields-with-populate-from-mongoose

반응형