Mongodb访问文档

时间:2017-05-30 15:29:39

标签: mongodb

我有以下数据库:

{ "_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})

但它似乎没有用,有什么建议吗?

2 个答案:

答案 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的内容   查询结果只包含与查询匹配的第一个元素   文档。

因此,在上面提到的查询位置$运算符用于投影部分,以检索每个文档的第一个分数。