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

运行查询后,我从 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] 字段和 Zuckerburg 的 [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");
      }
    }
  }

最佳答案

我并不完全清楚您所说的“返回字段”是什么意思,但您可以使用 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;
    }
  });

https://stackoverflow.com/questions/26691543/

相关文章:

mongodb - 有没有限制 mongodb 内存使用的选项?

windows - Mongodb:连接127.0.0.1:27017失败,原因:errno:100

c# - MongoDB C# 驱动程序 - 忽略绑定(bind)字段

mongodb - 如何查找然后聚合

javascript - Node.js - 使用 Mongoose 创建关系

java - 使用 MongoDB 进行单元测试

MongoDB - 如何查询集合中的嵌套项?

mongodb - MongoDB 将写入锁定到什么级别? (或 : what does it me

mongodb - 使用 Mongoose 找不到按 ObjectId 搜索的文档

mongodb - mongodb可以作为嵌入式数据库使用吗?