<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 22, 文章 - 0, 評論 - 1, 引用 - 0
    數據加載中……

    mongodb的morphia框架學習筆記(補充)

    morphia的更新操作詳解:
    -------------------------
    用id字段匹配是最快的,因為mongodb默認為id列做了索引:
    Query<Hotel> updateQuery = datastore.createQuery(Hotel.class).field("_id").equal(hotel.getId());
    除了"_id"外,還有一種靜態常量描述ID的方式:
    Query<Hotel> updateQuery = datastore.createQuery(Hotel.class).field(Mapper.ID_KEY).equal(hotel.getId());
    注意,用的是equal()方法,而不是equals()方法!
    -------------------------
    set和unset方法:
    改旅店名:
    ops = datastore.createUpdateOperations(Hotel.class).set("name", "Fairmont Chateau Laurier");
    改旅店地址名:
    ops = datastore.createUpdateOperations(Hotel.class).set("address.city", "Ottawa");
    刪除name屬性,會導致下次讀取時name=null
    ops = datastore.createUpdateOperations(Hotel.class).unset("name");
    -------------------------
    inc和dec方法:
    星級加1:
    ops = datastore.createUpdateOperations(Hotel.class).inc("stars");
    星級加4:
    ops = datastore.createUpdateOperations(Hotel.class).inc("stars", 4);
    -------------------------
    add和addAll方法:
    將11加入房間號數組中:
    ops = datastore.createUpdateOperations(Hotel.class).add("roomNumbers", 11);
    這與add("roomNumbers", 11, false)等價
    在非數組字段上執行add操作將報錯。
    add的第三個參數標識“是否加入重復元素”。若為true,如果已存在相同元素,不會加入,也不會報錯。
    -------------------------
    removeFirst/Last/All方法:
    假設目前是[ 1, 2, 3, 3 ],運行以下方法之后:
    ops = datastore.createUpdateOperations(Hotel.class).removeAll("roomNumbers", 3);
    就剩下了[ 1, 2 ]——所有的3都被移除了。
    假設目前是[ 1, 2, 3, 3 ],運行以下方法之后:
    ops = datastore.createUpdateOperations(Hotel.class).removeAll("roomNumbers", Arrays.asList(2, 3));
    就剩下了[ 1 ] ——所有的2和3都被移除了。
    -------------------------
    多重操作:
    ops = datastore.createUpdateOperations(Hotel.class).set("city", "Ottawa").inc("stars");
    如果在同一個updateOperation對象上對同一個字段多次操作,結果是不定的。
    -------------------------
    update/updateFirst方法:
    在默認driver里,使用update默認只更新第一個元素(multi默認為false)。
    但是在morphia里,update影響所有記錄(對應的底層driver里的update第四個參數multi為true),updateFirst才是影響第一個元素(對應的底層driver里的update第四個參數multi為false)。
    -------------------------
    createIfMissing參數:
    morphia里所有的方法都重載,最后可以附加一個參數“createIfMissing”
    對應的底層driver或者shell里的操作是upsert = true:
    db.collection.update( criteria, objNew, true, multi );
    -------------------------------------------------
    樂觀鎖注解@Version的使用:
    http://code.google.com/p/morphia/wiki/MongoNewsletterArticleDec2010
    class Person {
      @Id String name;
      String phone;
      @Version
      long version;
    }
    Person me = new Person("Scott Hernandez");
    ds.save(me) //保存一個person
    Person meAgain = ds.get(Person.class, "Scott Hernandez"); //把這個person讀出來先放著
    me.setPhone("111-376-7379"); 
    ds.save(me); //把原來的me修改一下再存進去,版本號已經變化
    meAgain.setPhone("123-376-7379");
    ds.save(meAgain); //剛次讀出來的meAgain是老版本號,此時存儲將拋出并發異常
    注:目前樂觀鎖的版本號實現方式是時間戳,根據作者的回答:
    http://code.google.com/p/morphia/wiki/MongoNewsletterArticleDec2010
    下一個版本的morphia將使用自增數字來代替時間戳作為樂觀鎖的版本號使用,以避免多服務器時間不一致等問題。

    posted on 2012-09-21 17:19 王星游 閱讀(2462) 評論(0)  編輯  收藏 所屬分類: java

    主站蜘蛛池模板: 久久亚洲精品国产亚洲老地址 | www.91亚洲| 亚洲偷自拍拍综合网| 久久久久久免费一区二区三区| 日韩人妻无码精品久久免费一| 国产精品免费观看| 亚洲精品国产高清嫩草影院| 久久伊人亚洲AV无码网站| 久久久无码精品亚洲日韩蜜臀浪潮 | 国产亚洲精aa在线看| 精品久久久久亚洲| 新最免费影视大全在线播放| 99热这里只有精品6免费| 性感美女视频免费网站午夜| 毛片在线全部免费观看| 免费不卡视频一卡二卡| 亚洲影院在线观看| jyzzjyzz国产免费观看| 自拍偷自拍亚洲精品被多人伦好爽| 最近的免费中文字幕视频| 亚洲AV无码专区在线电影成人 | 亚洲国产成人精品无码区在线秒播 | 图图资源网亚洲综合网站| 在线观看的免费网站| 国产成人亚洲精品影院| 亚洲一区中文字幕在线观看| 深夜国产福利99亚洲视频| 亚洲成人福利在线| 久久久久免费看黄a级试看 | 四虎国产精品永久免费网址| 亚洲&#228;v永久无码精品天堂久久 | 又大又硬又爽免费视频| 4444亚洲国产成人精品| 亚洲日本va午夜中文字幕一区| 在线观看亚洲精品国产| 美女黄网站人色视频免费| 爽爽日本在线视频免费| 久久精品国产亚洲AV天海翼| 国产精品无码素人福利免费| 亚洲人成无码网站在线观看| 日韩在线看片免费人成视频播放|