Mongodb:从文档中提取子文档

Posted

技术标签:

【中文标题】Mongodb:从文档中提取子文档【英文标题】:Mongodb : Pull out subdocument from a document 【发布时间】:2016-02-01 22:10:26 【问题描述】:

我的数据库架构如下所示:


"_id" : 137,
"name" : "Tamika Schildgen",
"scores" : [
    
        "score" : 4.433956226109692,
        "type" : "exam"
    ,
    
        "type" : "quiz",
        "score" : 65.50313785402548
    ,
    
        "type" : "homework",
        "score" : 89.5950384993947
    ,
    
        "type" : "homework",
        "score" : 54.75994689226145
    
]


 Bson filter = (Filters.eq("scores.type", "homework"));
    Bson projection = Projections.slice("scores", 2, 2);
    Bson sort = Sorts.ascending("_id");
    List<Document> all = collection.find(filter).projection(projection).sort(sort).into(new ArrayList<Document>());
    for (Document cur : all) 
        List<Document> score = (List<Document>) cur.get("scores");
        List marks = new ArrayList<Integer>();
        for (Document hw1 : score) 
            marks.add(hw1.get("score"));
        
        Collections.sort(marks);
        double x = (Double) marks.get(0);

        Bson find = Filters.eq("_id", cur.get("_id"));
        Bson update = new Document("$pull", new Document("scores", new Document("scores.type", "homework").append("scores.score" , x)));
        collection.updateOne(find,update);
        System.out.println("deleted " + cur.get("_id") + " " + x);

这些问题要求我们删除每个学生的最低作业分数。我的做法是:

首先获取仅包含id和作业分数的文档列表 学生的。 获取每个学生的最低硬件分数。 拉出包含最低作业分数的子文档。

我的打印正确地显示了每个学生的最低作业分数,但我的拉取查询没有从数据库中删除值。我在这里想念什么? 不寻求解决方案,只是提示我在这里做错了什么会有所帮助。谢谢。

【问题讨论】:

【参考方案1】:

您的代码需要进行小修正,您正在尝试删除

"scores.type":"homework", "scores.score":"whatever"

你应该删除子文档

"type":"homework", "score":"..."

【讨论】:

我昨天想通了。不过感谢您的帮助。 :)

以上是关于Mongodb:从文档中提取子文档的主要内容,如果未能解决你的问题,请参考以下文章

使用 mongoose 从 Mongodb 中删除子文档

如何从 mongodb 通过 Geowithin 获取匹配的子文档?

如何使用python脚本从mongoDB中检索数组中的子文档

如何使用python脚本从mongoDB中检索数组中的子文档

如何在 MONGODB 的嵌套文档数组中提取文档

从mongodb中的子文档数组中拉出(除了一个)文档