【问题标题】:Mongoose .populate doesn't work in conjunction with .selectMongoose .populate 不能与 .select 一起使用
【发布时间】:2019-03-25 14:55:22
【问题描述】:

我正在尝试仅使用 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 中实现相同的语法,但我得到了相同的结果。对我来说太奇怪了!提前感谢=]

【问题讨论】:

    标签: mongoose mongoose-schema mongoose-populate


    【解决方案1】:

    您可以使用 select {name: true} 只会选择名称字段

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

    如果您想从个人资料中选择特定字段,您也可以在那里选择

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

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

    【讨论】:

      猜你喜欢
      • 2014-12-01
      • 1970-01-01
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 2021-04-15
      • 2023-03-30
      相关资源
      最近更新 更多