如何仅在猫鼬中获取子文档?

Posted

技术标签:

【中文标题】如何仅在猫鼬中获取子文档?【英文标题】:How to get sub document only in mongoose? 【发布时间】:2017-11-24 13:11:58 【问题描述】:

我正在尝试从具有以下架构的数组中仅提取子文档:

const UserSchema = Schema(
name: 
    type: String
,library:[
    story:type: Schema.Types.ObjectId,ref: 'Story'
],
);

我尝试使用:

module.exports.getUserStories = function(userId, callback)
    User.findOne(_id: userId ,callback)
    .select('library.story')
;

它给出了这个结果:

    
  "_id": "5949615072e15d2b34fa8f9d",
  "library": [
    
      "story": "592ae46cf2a0ba2b208cb092"
    ,
    
      "story": "592ae608df26d80790092fe9"
    ,
    
      "story": "592ae46cf2a0ba2b208cb092"
    
  ]

但我期望得到的只是这个:

[
  
    "story": "592ae46cf2a0ba2b208cb092"
  ,
  
    "story": "592ae608df26d80790092fe9"
  ,
  
    "story": "592ae46cf2a0ba2b208cb092"
  
]

我已经尝试过使用双重选择,例如:

module.exports.getUserStories = function(userId, callback)
    User.findOne(_id: userId ,callback)
    .select('library.story')
    .select('story')
;

但是结果是一样的

【问题讨论】:

即使我调用了 .populate() 我仍然在顶部获得库 【参考方案1】:

试试这个:

module.exports.getUserStories = function(userId, callback)
    User.find(_id: userId ,'library.story').then(function(user)
        if(user)
            callback(user.library);
        );
;

文档here

【讨论】:

【参考方案2】:

此输出预计将通过“选择”返回,但您只需按照您的需要准备返回的数据,如下所示:

User.findOne(_id: userId ).select('library').then(function(result)
  if(result)
    //If there is returned item
    var stories = result.library;
    //Continue ...
  

,function(error)
  //Error handling
)

【讨论】:

这似乎是正确的,但是当我尝试 console.log() 时,我在 result.library 上没有定义 应该可以,你的代码好像有问题发给我

以上是关于如何仅在猫鼬中获取子文档?的主要内容,如果未能解决你的问题,请参考以下文章

如何在猫鼬中获取 NumberLong 记录

如何在猫鼬中找到最新的子文档

如何在猫鼬中保存子文档的数组?

如何在猫鼬中填充另一个模型的子文档?

在猫鼬中删除子文档

如何在猫鼬中从活动收集中获取照片收集数据?