我正在尝试创建一个查询,当它小于70且类型为考试时,只使用类型分数从我的数据库中提取此信息:
{"_id":0,"name":"aimee Zank",
"scores":[{"score":1.463179736705023,"type":"exam"},
{"score":11.78273309957772,"type":"quiz"},{"score":35.8740349954354,"type":"homework"}]}
我没有收到任何错误,而且它变得空白。这是我正在尝试使用的查询:
db.students.find({"scores":[{"score":{$lt:70},"type":"exam"}]}).pretty
任何帮助将不胜感激:)
答案 0 :(得分:1)
这不是你如何匹配数组中的元素。使用$elemMatch
:
db.students.find({"scores":{$elemMatch:{score:{$lt:70},type:"exam"}}})
<强>更新强>: OP将帖子标记为&#34;未回答&#34;然后带来扭曲的要求。展望未来,请确保针对您的全新要求发布单独的问题,或者正确陈述您的问题,不要随着时间的推移而延长。但是,这里是使用聚合框架的过滤查询:
db.collection.aggregate([
{$addFields:{scores:{$filter:{
input:"$scores",
as:"score",
cond:{$and:[{$eq:["$$score.type","exam"]},{$lt:["$$score.score",70]}]}
}}}}
])
这会过滤score
小于70的所有考试。