根据父项中的值按 Id 查找子文档
Posted
技术标签:
【中文标题】根据父项中的值按 Id 查找子文档【英文标题】:Find Subdocument by Id based on value in parent 【发布时间】:2016-12-25 19:42:12 【问题描述】:鉴于我有以下结构的文档:
selectedId: ObjectId("57b5fb2d7b41dde99009bc75"),
children: [
_id: ObjectId("57b5fb2d7b41dde99009bc75"), val: 10,
_id: ObjectId("57b5fb2d7b41dde99009bc75"), val: 20,
]
父值“selectedId”总是引用其中一个子 ID,我如何才能获取 _id = selectedId 的子子文档?
我尝试过:
parentModel.findOne('selectedId': 'this.children._id')
然而,据我所知,第二个字符串被视为文字。那么如何在查询中引用父级的字段呢?
编辑:显然,这可以通过两个查询来完成,获取父级的“selectedId”值,然后再次查询。但是,我想在单个查询中执行此操作。
【问题讨论】:
【参考方案1】:您可以使用聚合框架,特别是利用 $arrayElemAt
和 $filter
运算符来返回子子文档。以下示例显示了这一点:
parentModel.aggregate([
"$project":
"children":
"$arrayElemAt": [
"$filter":
"input": "$children",
"as": "item",
"cond":
"$eq": ["$$item._id", "$selectedId"]
, 0
]
]).exec(callback);
【讨论】:
以上是关于根据父项中的值按 Id 查找子文档的主要内容,如果未能解决你的问题,请参考以下文章
使用 Composition API 在 Vue 中处理子项和父项中的提交事件