簡體   English   中英

如何正確保存到mongodb?

[英]How to save properly to mongodb?

所以這是我第一次使用 MongoDB,我在保存到文檔時遇到了問題

保存方法

    public void addStamp(UUID playerUUID, UUID issuedByUUID, String playerCountry, String enteringCountry, String enteringCity, boolean isEntry, Date date) {
        Document document = getPassport(playerUUID, playerCountry);

        DBObject stamp = new BasicDBObject("stampFor", enteringCountry)
                .append("cityEntered", enteringCity)
                .append("issuedBy", issuedByUUID)
                .append("isEntry", isEntry)
                .append("date", date);

        List<DBObject> stamps = (List<DBObject>) document.get("stamps");
        stamps.add(stamp);

        mongoCollection.updateOne(document, new Document("$set", new Document("stamps", stamps)));
    }

獲取護照的方法(getPassport)

    public Document getPassport(UUID uuid, String country) {
        List<Document> list;

        if (get(uuid, "passports") != null) list = get(uuid, "passports");
        else return null;

        for (Document document : list) {
            if (document.getString("country").equalsIgnoreCase(country))
                return document;
        }
        return null;
    }

獲取方法

    public <T> T get(UUID uuid, String key) {
        Document document = mongoCollection.find(new Document("UUID", uuid)).first();

        if (document == null) return null;
        if (document.get(key) == null) return null;

        return (T) document.get(key);
    }

文檔的結構如何,

{
    "_id": {
        "$oid": "5e71c1ea12ee5455287a968f"
    },
    "UUID": {
        "$uuid": "12642edb-f181-4fbf-bfff-642097f1cc69"
    },
    "passports": [
        {
            "country": "usa",
            "issuedBy": {
                "$uuid": "12642edb-f181-4fbf-bfff-642097f1cc69"
            },
            "city": "nyc",
            "date": {
                "$date": "2020-03-18T06:38:34.734Z"
            },
            "stamps": []
        }
    ]
}

我想要做的是編輯文檔的圖章部分,但是使用我擁有的代碼,它執行時沒有問題,但它不會對文檔進行任何更改,我不確定問題是什么。

您的get函數似乎只返回沒有其他識別數據的護照數組,然后getPassport函數只返回來自匹配國家/地區的護照對象。

這意味着在你打電話的時候

mongoCollection.updateOne(document, ... )

document的內容將類似於:

        {
            "country": "usa",
            "issuedBy": {
                "$uuid": "12642edb-f181-4fbf-bfff-642097f1cc69"
            },
            "city": "nyc",
            "date": {
                "$date": "2020-03-18T06:38:34.734Z"
            },
            "stamps": []
        }

這將只匹配來自 mongoCollection 的具有頂級字段countryissuedBycitydate和帶有顯示的確切值的stamps文檔。 由於這不是該集合中的文檔的樣子,因此它不匹配任何內容,這不是錯誤,但這也意味着沒有任何內容得到更新。

另請注意, updateOne適用於文檔,而不是子數組的元素,因此替換stamps可能不會像您想要的那樣工作。

您可以使用數組過濾器或更新的管道形式,通過 $map 或 $filter 來編輯匹配的元素。

暫無
暫無

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

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