【问题标题】:Mongodb Query with conjoined data points具有联合数据点的 Mongodb 查询
【发布时间】:2026-01-30 13:35:01
【问题描述】:

我正在尝试创建一个查询,当它小于 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

任何帮助将不胜感激:)

【问题讨论】:

    标签: mongodb nosql mongodb-query


    【解决方案1】:

    这不是你匹配数组中元素的方式。使用$elemMatch

    db.students.find({"scores":{$elemMatch:{score:{$lt:70},type:"exam"}}})
    

    更新: OP 将帖子标记为“未回答”,然后提出了扭曲的要求。展望未来,请确保针对您的全新要求单独发布问题或正确说明您的问题,不要随着时间的推移而延长问题。但是,这是使用聚合框架的过滤器查询:

    db.collection.aggregate([
      {$addFields:{scores:{$filter:{
         input:"$scores",
         as:"score",
         cond:{$and:[{$eq:["$$score.type","exam"]},{$lt:["$$score.score",70]}]} 
       }}}}
    ])
    

    这会过滤所有 score 小于 70 的考试。

    【讨论】:

    • 这不过滤任何东西,它只是查询整个数据库。
    • 告诉我一件事,我的查询与您的查询有何不同?它如何查询整个数据库?它只是查询“students”集合。这对我来说毫无意义。请在问题中正确解释您的问题。我的回答是基于您的问题,而不是基于您的假设。
    • 另外你没有提到你想要“过滤”并且不想点击查找查询。你刚刚问为什么你的 find 查询不起作用,我已经更正了。您的 find 查询也命中了整个集合,它与我的查询没有什么不同。如果您想在数组中使用过滤器运算符,请参考 mongo docs。