簡體   English   中英

mongodb java驅動程序pullByFilter

[英]mongodb java driver pullByFilter

我有文檔架構,例如

{
    "_id" : 18,
    "name" : "Verdell Sowinski",
    "scores" : [
            {
                    "type" : "exam",
                    "score" : 62.12870233109035
            },
            {
                    "type" : "quiz",
                    "score" : 84.74586220889356
            },
            {
                    "type" : "homework",
                    "score" : 81.58947824932574
            },
            {
                    "type" : "homework",
                    "score" : 69.09840625499065
            }
    ]
}

我有一個使用pull的解決方案,可以一次刪除一個元素,但看到我想得到一個通用的解決方案,該解決方案可以解決數組中存在一個和多個元素之間的不規則架構,並且我想刪除所有基於條件的元素。

我正在使用mongodb驅動程序3.2.2,看到了這個pullByFilter聽起來不錯

創建一個更新,從數組中刪除所有與給定過濾器匹配的元素的更新。

我試過了

Bson filter = and(eq("type", "homework"), lt("score", highest));
Bson u = Updates.pullByFilter(filter);
UpdateResult ur = collection.updateOne(studentDoc, u);

毫不奇怪,這沒有任何作用,因為我沒有指定數組scores

我得到一個錯誤

位置運算符未從查詢中找到所需的匹配項。 未擴展的更新:scores。$。type

當我將過濾器更改為

Bson filter = and(eq("scores.$.type", "homework"), lt("scores.$.score", highest));

有沒有一步解決這個問題的方法?

我找不到這種特定方法的信息。 這個問題可能與如何在mongodb中更新多個數組元素有關

經過更多的“思考”(和一些反復試驗),我找到了包裝基本過濾器的正確過濾器方法。 我想我過多地關注數組運算符。

如果發生燃燒,我不會在這里發布。

提示:處理Filters輔助方法時,請考慮“ matches ...”(與正則表達式模式匹配一​​樣);)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM