使用Mongoose中的.populate()返回某些字段

运行我的查询后,我从MongoDB返回一个JSON值。 问题是我不想返回与我的返回相关的所有JSON,我试图search文档,并没有find一个正确的方法来做到这一点。 我在想,如果可能的话,如果是这样的话,是什么方法呢? 例如:在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" } } 

如果它存在一个用户,但是如果它不返回另一个字段,返回一个字段的正确方法是什么。 对于上面的例子,我想返回RMS的[email][address]字段和Zuckerburg的[facebook][address]字段。 这是我试图find如果一个字段为空,但它似乎没有工作。

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

尝试做到这一点:

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

如果您只想为填充的文档返回一些特定字段,则可以通过将字段名称语法作为第二个parameter passing给填充方法来完成此操作。

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

请参阅Mongoose填充字段select

现在你可以做的是:

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

尝试做到这一点:

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