当前位置: 首页 > 知识库问答 >
问题:

从Mongoose中返回某些字段

计泉
2023-03-14

运行查询后,我从MongoDB返回一个JSON值。问题是我不想返回与我的返回相关的所有JSON,我尝试搜索文档,但没有找到正确的方法。我想知道如果可能的话会怎样,如果可能的话,正确的做法是什么。示例:在数据库中

{
    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]字段和扎克伯格的[facebook][address]字段。这就是我试图找到的字段是否为空,但它似乎不起作用。

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

共有3个答案

景信瑞
2023-03-14

尝试这样做:

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);
}
黄和怡
2023-03-14

如果您只想为填充的文档返回几个特定的字段,可以通过将字段名语法作为第二个参数传递给填充方法来实现这一点。

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

请参见猫鼬填充字段选择

闻人梓
2023-03-14

我不完全清楚你所说的“返回字段”是什么意思,但是你可以使用精益()查询,这样你就可以自由修改输出,然后填充两个字段,并对结果进行后处理,只保留你想要的字段:

.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;
    }
  });
 类似资料:
  • 问题内容: 我正在使用Elasticsearch索引我的文档。 是否有可能指示它仅返回特定字段,而不是它存储的整个json文档? 问题答案: 是的 使用源过滤器。如果您使用JSON搜索,它将看起来像这样: 在ES 2.4及更低版本中,您还可以在search API中 使用fields选项: ES 5+中已弃用此功能。而且,源过滤器更强大!

  • 我试图更新mongodb集合的某个值,但没有成功,它只更新一个字段,而不更新另一个字段,下面是我的代码, 模式: 下面是控制台结果,其中包含mongoose调试 猫鼬:clients.findone({_id:ObjectId(“57AA0403B8F3786D09D8C626”)}){fields:未定义} 之前的数据:{datePayment:2016-08-09T18:03:07.501z,

  • 问题内容: “foo” instanceof String //=> false “foo” instanceof Object //=> false true instanceof Boolean //=> false true instanceof Object //=> false false instanceof Boolean //=> false false instanceof Ob

  • 使用Spring Boot R2DBC时,我面临这样一种情况,即使用包含INNER JOIN的编写原始查询时,结果中返回的所有行中的一些字段都有数据,但其他字段为空。然而,当直接从DB运行相同的查询时,所有字段都被填充,这是我所期望的。可能是什么问题?列名和POJO/Bean名称完全匹配,并且是的混合,在DB级别和代码中都是大写和小写。例如,在下面的SQL: 并给出以下POJO: ... 通过R2

  • 问题内容: 在使用时,我正在获取一些价值。我搜寻了很多,但徒劳无功。 以下是我的代码: 输出控制台: 所有日期字符串的格式都是相同的,但对于几个值我还是没有。为什么这样?请帮忙。我哪里错了? 问题答案: 格式应该是24小时的 HH ,即使您只获得12小时的值。

  • 如果我有一个物体 并创建这些对象的数组 有没有一种方法可以让我只检索数组中所有对象的一个属性?例如: 上面的示例没有将set keyArray返回给任何东西,但我希望它可以设置成如下所示: 有没有人知道这样做的方法,而不需要遍历objArray并手动将每个键属性复制到键数组?