-
Type: Task
-
Resolution: Duplicate
-
Priority: Major - P3
-
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.