如何解决MongoDB 在子文档中查找
我有一堆文档,每个文档的格式都是这样的:
{
"faculty": "Some Faculty","students": [
{
"id": "51230867123","age": "21","name": "awdawdawdawawd"
},{
"id": "0217356102","age": "22","name": "awdawd"
},...
]
}
我已使用 insertMany([...])
将这些文档插入到单个 MongoDB 集合中,所以现在我的 students
表如下所示:
{
"faculty": "Some Faculty","name": "John Doe"
},"name": "Jane Doe"
},...
]
},{
"faculty": "Other Faculty","students": [
{
"id": "1240876124","name": "Jimmy Doe"
},{
"id": "2309857120578","name": "Johnny Doe"
},...
我非常想了解如何对某些子文档(特别是 find
)执行 students
查询。例如,我想用 find
students.name
所有 students.age > 23
。我尝试了很多查询,包括 db.students.find({"students.age": {$gt: /.*B.*/}},{_id: 0,"students.name": 1})
,但这些查询总是返回至少一个学生满足条件的整个文档。我想查询个别学生。这可以使用 find
(没有 aggregate
)吗?
通过aggregate
,可以使用unwrap
,这几乎正是我需要做的。但是,我希望使用 find
的一些技巧来实现这种行为。
解决方法
您可以在 find 和 findOne 方法的投影中使用聚合运算符,从 MongoDB 4.2 开始,
-
$filter
迭代学生数组的循环并检查所需条件,它将返回过滤结果 -
$map
迭代上述过滤结果的循环并仅返回name
db.collection.find(
{ "students.age": { $gt: "23" } },{
"students": {
$map: {
input: {
$filter: {
input: "$students",cond: { $gt: ["$$this.age","23"] }
}
},in: "$$this.name"
}
}
}
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。