在文档数组猫鼬中获取精确的子文档

Posted

技术标签:

【中文标题】在文档数组猫鼬中获取精确的子文档【英文标题】:Get precise subdocuments in document array mongoose 【发布时间】:2019-10-06 04:42:23 【问题描述】:

我正在开发一个使用 mongoose 与我的 mongo 数据库交互的 graphql API,但我正在努力解决一些问题。我有带有子文档数组的文档,我需要获取包含具有特定字段值的子文档的所有文档。问题是我只想在文档中获取这个子文档。用一个例子更容易解释:

我的文件是这样的:

documents: [

  id: 1,
  items: [
    
      value: 5,
    ,
    
      value: 10,
    ,
  ]
,

  id: 2,
  items: [
    
      value: 7,
    ,
    
      value: 10,
    ,
  ]
]

我想获取所有包含value == 5 项目但仅包含此值的文档,例如:

results : [

  id: 1,
  items: [
    
      value: 5,
    
  ]
]

我现在要做的是:

documents.find(
  items: 
    $elemMatch : 
      value:  $eq: 5 
    
  ,
);

这样做我得到了正确的文档,但它包含所有项目,而不仅仅是符合条件的项目。我寻找解决方案,但没有找到任何方法。

感谢您的帮助,我希望它足够清楚。

【问题讨论】:

【参考方案1】:

您需要指定要从查询中返回的字段。

documents.find(
    items: 
      $elemMatch : 
        value:  $eq: 5 
      
    ,
  , requiredFields: 1);

请参阅this 问题中的示例。

官方文档:here - 搜索“select”

如果你也需要过滤掉结果,你可以使用$filter

【讨论】:

【参考方案2】:

您需要按如下方式使用聚合框架:

db.test.aggregate(
 $match:  "id": 1 , 
 $unwind: '$items' , 
 $match:  "items.value": 5 ,
 $project:  "_id": 0 
)

返回值:

 "id" : 1, "items" :  "value" : 5  

【讨论】:

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

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

一次更新猫鼬中的多个文档

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

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

如何获取 Model.countDocuments() 函数返回的文档计数并将其设置为猫鼬中的其他字段

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