猫鼬.populate不能与.select

时间:2019-03-01 19:25:45

标签: mongoose mongoose-schema mongoose-populate

我正在尝试仅使用name和填充的profile填充用户文档。如果我执行以下操作:

User.find().populate("profile")

输出:

[  
   {  
      "securityQuestions":{  
         "isSetup":false
      },
      "videos":[  

      ],
      "events":[  

      ],
      "_id":"5c7965aeaf076938cc974610",
      "name":"Wade Aston",
      "email":"mrwadepro@gmail.com",
      "date":"2019-03-01T17:02:38.845Z",
      "__v":0,
      "profile":{  
         "_id":"5c7965afaf076938cc974612",
         "user":"5c7965aeaf076938cc974610",
         "profile_picture":"5c7965aeaf076938cc974611",
         "media_feed":[  

         ],
         "date":"2019-03-01T17:02:39.055Z",
         "__v":0
      },
      "profile_type":"DistrictAdminProfile",
   }
]

这很好,但是我不想要所有用户字段,我只想要名称和填充的个人资料。因此,如果我这样做:

User.find({}, "name profile").populate("profile")

输出:

[  
   {  
      "_id":"5c7965aeaf076938cc974610",
      "name":"Luke",
      "profile":"5c7965afaf076938cc974612"
   }
]

由于某些原因,选择导致填充不再起作用。我尝试通过这篇Similar Question帖子实现相同的语法,但得到的结果相同。我真奇怪!预先感谢=]

1 个答案:

答案 0 :(得分:0)

您可以使用 select {name: true}仅选择姓名字段

User.find().select({name: true}).populate("profile")

如果您还想从配置文件中选择特定字段,也可以在其中选择

User.find().select(name: true).populate('profile', { __v: false })

这不会列出个人资料中的 __ V 字段。