在文档数组猫鼬中获取精确的子文档
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
【讨论】:
以上是关于在文档数组猫鼬中获取精确的子文档的主要内容,如果未能解决你的问题,请参考以下文章