以下是我的mongoDB数据
OnClickListener
我想要显示那些数字大于(或等于)两个科目的学生数量超过(或等于)的学生的详细信息。例如,数学分数以及 Sci分数大于89的学生。我能够找到一个主题,但不能超过一个。以下是
的代码 {
"_id": "SG01",
"name": "Pawan",
"marks": [
{
"English": 93,
"Maths": 90,
"Hindi": 89,
"Sci": 98
}
],
"__v": 0
}
{
"_id": "SG02",
"name": "Dravid",
"marks": [
{
"English": 40,
"Maths": 67,
"Hindi": 56,
"Sci": 45
}
],
"__v": 0
}
{
"_id": "SG03",
"name": "Kartik",
"marks": [
{
"English": 65,
"Maths": 77,
"Hindi": 80,
"Sci": 79
}
],
"__v": 0
}
我尝试了 $和但未能获得结果。任何帮助将不胜感激。
修改 这就是我正在做的事情..在Robo Mongo上,find()部分运行顺畅 但是当我试图使用POSTMAN ...
返回文档时 {
det.aggregate([
{
$project: {
_id:0,name:1,
marks:[ {
$filter: {
input: "$marks",
as:"mark",
cond: { $gte: [ "$$mark.Maths",89]}
}
}]
}
}
],function(err,data){
if(err)
res.json({message:err});
else {
res.json({data:data});
}
})
}
没有消息就给出了错误然后我试图在控制台上获得o / p.below是错误
det.find({ marks:{ $elemMatch:{ Maths: { $gt :20 ,$lt :90}}}},function(err,data){
console.log(err,data)
if(err)
res.json({err});
else {
res.json({data});
}
})
答案 0 :(得分:0)
您必须使用$ elemMatch运算符
db.collection.find({ "marks": { "$elemMatch": { "Math": {"$gt":70, "$lt":100}, "Sci": 79 }}})
答案 1 :(得分:0)
我不确定为什么"标记"是模式中的一个数组,因为它只有{subject:grade}
个字段的一个元素,但是对于那个确切的模式,您可以这样查询(在$expr
中至少需要3.6才能使用find
:
db.det.find({$expr:{$gt:[
{$size: {$filter:{
input:{$objectToArray:{$arrayElemAt:["$marks",0]}},
cond:{$gt:["$$this.v", 89]}
}}},
0
]}})