Uploaded image for project: 'C++ Driver'
  1. C++ Driver
  2. CXX-443

Could not update an object with "$something"

    • Type: Icon: Task Task
    • Resolution: Duplicate
    • Priority: Icon: Major - P3 Major - P3
    • 0.1.0
    • Affects Version/s: legacy-0.0-26compat-2.6.5
    • Component/s: None
    • None

      Hello,

      I am currently using the C++ driver in order to insert/update objects in a collection.

      I have the need to insert a pipeline in the object.

      Using the insert it works, but when I try to do an update, it fails telling me:

      "The dollar ($) prefixed field '$unwind' in 'pipeline.0.$unwind' is not valid for storage."
      

      Did you have any clue how can I make it works ?

      Here is an example of C++ code for the issue:

      std::auto_ptr<dsclient::ScopedDBConnection> mongoCnx(new dsclient::ScopedDBConnection(mongoUri));
      
      
      std::vector<mongo::BSONObj> pipeline;
      pipeline.push_back(BSON("$unwind" << "$CPN"));
      pipeline.push_back(BSON("$limit" << 10));
      
      mongo::BSONObj query = BSON(
      						"aggregate"  << "document"
      						<< "pipeline"   << pipeline
      						<< "cursor"     << BSON("batchSize" << 0));
      
      // { aggregate: "document", pipeline: [ { $unwind: "$CPN" }, { $limit: 10 } ], cursor: { batchSize: 0 } }
      
      mongo::DBClientBase* mongoDatabase = mongoCnx->getInternals()->get();
      mongoDatabase->insert("test.test_jobs", query);
      
      mongo::BSONObj updateQueryBson = BSON("_id" << mongo::OID("5487185d5bacec1fd6d560fa"));
      
      mongo::Query mongoUpdateQuery(updateQueryBson);
      // { _id: ObjectId('5487185d5bacec1fd6d560fa') }
      
      mongo::BSONObj updateQuery = BSON(
      						"aggregate"  << "store"
      						<< "pipeline"   << pipeline
      						<< "cursor"     << BSON("batchSize" << 0));
      						
      						
      mongo::BSONObj updatedBson = BSON("$set" << updateQuery );
      // { $set: { aggregate: "store", pipeline: [ { $unwind: "$CPN" }, { $limit: 10 } ], cursor: { batchSize: 0 } } }
      
      mongoDatabase->update("test.test_jobs", mongoUpdateQuery, updatedBson);
      mongoDatabase->getLastError()
      
      // Last error: The dollar ($) prefixed field '$unwind' in 'pipeline.0.$unwind' is not valid for storage.
      

            Assignee:
            Unassigned Unassigned
            Reporter:
            clement.oliva@amadeus.com Clement OLIVA
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: