쿼리를 실행 한 후 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
...
답변
이렇게 해보세요 :
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})