hi, I am a develop from LeTV China.
I use mongo cxx client ver. legacy, and have a question with the oid of the insert operation.
In the github wiki, I have read below:
Use the GENOID helper to add an object id to your object. The server will add an _id automatically if it is not included explicitly.
BSONObj p = BSON( GENOID << "name" << "Joe" << "age" << 33 );
// result is:Unknown macro: { _id }BSONObj p = BSONObjBuilder().genOID().append("name","Joe").append("age",33).obj();
It means that mongo client will not generate the oid for me unless I included it explicitly in the BSONbuilder.
But in `insert_write_operation.cpp`, I found that mongo client will gerate oid for me automatically.
BSONObj InsertWriteOperation::_ensureId(const BSONObj& doc) {
BSONElement id = doc.getField("_id");
if (!id.eoo()) {
uassert(0,
"value of _id element cannot contain any fields starting with $",
!id.isABSONObj() || id.Obj().okForStorage());
return doc;
}
BSONObjBuilder bob;
bob.append("_id", OID::gen());
bob.appendElements(doc);
return bob.obj();
}
So, will the mongo client give the choice to user to select who will genrate the oid, from the mongo client or the mongo server.