需要MongoDB查询

时间:2015-01-25 09:27:49

标签: mongodb

对不起,我对查询感到困惑,请帮忙。假设我们有一个包含

的文档
{  
   "_id":100,
   "name":"Demarcus Audette",
   "scores":[  
      {  
         "score":47.42608580155614,
         "type":"exam"
      },
      {  
         "score":44.83416623719906,
         "type":"quiz"
      },
      {  
         "score":39.01726616178844,
         "type":"homework"
      },
         "score":89.01726616178844,
         "type":"homework"
      }
   ]
}

我想编写一个查询,只返回包含家庭作业的行,这意味着输出应该如下所示

{  
   "_id":100,
   "name":"Demarcus Audette",
   "scores":[  
      {  
         "score":39.01726616178844,
         "type":"homework"
      },
         "score":89.01726616178844,
         "type":"homework"
      }
   ]
}

请建议。在此先感谢

1 个答案:

答案 0 :(得分:0)

使用$elemMatch运算符。

db.collection.find({ "scores": { $elemMatch: { "type": "homework" } } } );

修改

你问的是不可能的。您将需要上述查询,并以您编程的任何语言过滤掉其余的查询。您还可以使用$unwind$match

来使用聚合函数
db.collection.aggregate(
    {$unwind: "$messages"},
    {$match: {"scores.type": "homework"}}
);

$unwind展平您的数组,$match是您实际的查询,它将返回匹配的文档。 请注意 $ unwind将为数组中的每个元素创建一个不同的文档。这意味着当您根据示例过滤“家庭作业”时,您将获得两个结果。