对不起,我对查询感到困惑,请帮忙。假设我们有一个包含
的文档{
"_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"
}
]
}
请建议。在此先感谢
答案 0 :(得分:0)
使用$elemMatch
运算符。
db.collection.find({ "scores": { $elemMatch: { "type": "homework" } } } );
修改强>
你问的是不可能的。您将需要上述查询,并以您编程的任何语言过滤掉其余的查询。您还可以使用$unwind
和$match
。
db.collection.aggregate(
{$unwind: "$messages"},
{$match: {"scores.type": "homework"}}
);
$unwind
展平您的数组,$match
是您实际的查询,它将返回匹配的文档。 请注意 $ unwind将为数组中的每个元素创建一个不同的文档。这意味着当您根据示例过滤“家庭作业”时,您将获得两个结果。