Results 1 to 1 of 1

Thread: Mongo - lost type after $set update

  1. #1

    Default Mongo - lost type after $set update

    spring-data-mongodb : 1.0.4.RELEASE

    I have this scenario with :
    1) insert a soup record + it's cinnamon spice
    2) find & modify the soup's to use a new spice instead : pepper spice
    3) load the soup from db, but the spice is now 'typeless', instanceof pepper spice returns false

    Let's jump to the simple codes and the record output from mongo shell as it changes :
    1) insert a soup record + it's cinnamon spice
    Code:
    		// insert a cinnamon soup
    		SlurpSoup soup = new SlurpSoup(new CinnamonSpice());
    		this.ops.insert(soup, collectionName);
    
    		/*
    			> db.testUpdate.find().pretty();
    			{
    			        "_id" : "6cdf40c1-1730-4d23-a94b-e461fbfc2f65",
    			        "_class" : "lab.convert.SlurpSoup",
    			        "spice" : {
    			                "_class" : "lab.convert.SlurpSoup$CinnamonSpice",
    			                "label" : "cinnamon"
    			        }
    			}
    		*/
    
    		// load the soup, and check the spice type, should be a cinnamon spice type
    		SlurpSoup loadedFromDb = this.ops.findById(soup.getId(), SlurpSoup.class, collectionName);
    		Assert.isTrue(loadedFromDb.getSpice() instanceof CinnamonSpice, "should be a cinnamon spice !");
    2) find & modify the soup's to use a new spice instead : pepper spice
    Code:
    		// change the spice
    		this.ops.findAndModify(
    			Query.query(Criteria.where("_id").is(soup.getId())), // get the created soup
    			Update.update("spice", new PepperSpice()), // re-set the spice type
    			SlurpSoup.class,
    			collectionName
    		);
    
    		/*
    			> db.testUpdate.find().pretty();
    			{
    			        "_class" : "lab.convert.SlurpSoup",
    			        "_id" : "6cdf40c1-1730-4d23-a94b-e461fbfc2f65",
    			        "spice" : {
    			                "label" : "pepper"
    			        }
    			}
    		*/
    3) load the soup from db, but the spice is now 'typeless', instanceof peper spice returns false
    Code:
    		// reload the soup, and re-check the spice type, now should be a pepper spice type
    		loadedFromDb = this.ops.findById(soup.getId(), SlurpSoup.class, collectionName);
    		Assert.isTrue(loadedFromDb.getSpice() instanceof PepperSpice, "should be a pepper spice !");
    
    			/*
    			Exception in thread "main" java.lang.IllegalArgumentException: should be a pepper spice !
    				at org.springframework.util.Assert.isTrue(Assert.java:65)
    				at lab.convert.TestUpdate.test(TestUpdate.java:65)
    				at lab.convert.TestUpdate.main(TestUpdate.java:27)
    			 */
    The complete sources and context file is attached.

    Is this a (reported) bug ?
    Attached Files Attached Files

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •