gpt4 book ai didi

mongodb - 过滤对象,其中嵌套数组中的所有元素都符合条件

转载 作者:可可西里 更新时间:2023-11-01 10:40:19 25 4
gpt4 key购买 nike

假设一个数据库包含类似的东西

{  
"grades":[
{
"grade":"A",
"score":2
},
{
"grade":"A",
"score":6
},

],
"name":"Morris Park Bake Shop"
},
{
"grades":[
{
"grade":"A",
"score":8
},
{
"grade":"B",
"score":23
}
],
"name":"Wendy'S"
}

我如何应用一个过滤器,只返回所有等级均为“A”的餐厅?

如果我尝试db.restaurants.find({ "grades.grade": "A"} ),它的工作方式是在我的元素中搜索任何等级。

我试过使用 aggregate with unwind to,但它做同样的事情,它打开成绩,过滤,并返回餐厅的任何匹配...

最佳答案

在你的情况下我会做这样的事情:

db.getCollection('test').aggregate([
{$unwind:"$grades"},
{ $group: {
_id: '$_id',
grades : { $first: '$grades' },
all_grades: { $sum: 1 },
all_grades_that_match: { $sum: { $cond: [ { $eq: [ '$grades.grade', "A" ] }, 1, 0 ] } },
name: { $first: '$name' }
}},
{ $project: {
_id: 1,
name: 1,
grades: 1,
arrays_equal: { $cond: [ { $eq: [ '$all_grades', '$all_grades_that_match' ] }, 1, 0 ] }
}},
{ $match: { 'arrays_equal' : 1 } }
])

group操作会统计成绩总数和匹配你查询的成绩数,projection会比较这两个结果是否相等,最后match操作只会保留arrays_equal所在的那些是的

关于mongodb - 过滤对象,其中嵌套数组中的所有元素都符合条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46381415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com