我有以下数据库:
{ "_id" : 1, "results" : [ { "product" : "abc", "score" : 10 }, { "product" : "xyz", "score" : 5 } ] }
{ "_id" : 2, "results" : [ { "product" : "abc", "score" : 8 }, { "product" : "xyz", "score" : 7 } ] }
{ "_id" : 3, "results" : [ { "product" : "abc", "score" : 7 }, { "product" : "xyz", "score" : 8 } ] }
我想显示每个_id的第一个分数,我尝试了以下内容:
db.students.find({},{"results.$":1})
但它似乎没有用,有什么建议吗?
答案 0 :(得分:0)
您可以利用aggregation pipeline来解决此问题。
将$project与$arrayElemAt结合使用,指向数组中的相应节点索引。
因此,要提取第一个分数的文件,请写下面的查询。
db.students.aggregate([ {$project: { scoredoc:{$arrayElemAt:["$results",0]}} } ]);
如果您希望得分不包括产品,请使用$results.score
,如下所示。
db.students.aggregate([ {$project: { scoredoc:{$arrayElemAt:["$results.score",0]}} } ]);
此处scoredoc
对象将包含第一个得分元素的所有文档。
希望这有帮助!
答案 1 :(得分:0)
根据上述说明,请尝试在MongoDB shell中执行以下查询
db.students.find(
{results:
{$elemMatch:{score:{$exists:true}}}}, {'results.$.score':1}
)
根据MongoDB文档
位置$运算符限制了a的内容 查询结果只包含与查询匹配的第一个元素 文档。
因此,在上面提到的查询位置$运算符用于投影部分,以检索每个文档的第一个分数。