Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

393
Views
How to prevent _t and _v when inserting into MongoDB?

I'm utilizing Dictionary. After .insert() there are "_t" and "_v". Two posts here talked about serialization converting to JSON first then BSON. I'm using MongoDB's driver v2.4.3,

mCollection.InsertOne(x);
IMongoCollection<myDoc> mCollection = Db.GetCollection<myDoc>("whatever");

If I do JSON-to-BSON, it complains about can't convert BsonDocument to myDoc. Switching to IMongoCollection<BsonDocument> mCollection = Db.GetCollection<BsonDocument>("whatever"); still get _t and _v.

How to avoid _t and _v?

enter image description here

Here is my code of data type and utilization:

public class myObjForDictionary
    {
        //...
    }
    public class myDoc
    {
        // ... some other elements, then Dictionary
        public Dictionary<string, object> myDictionary { get; set; }
    }

    // to instantiate the
    class myClass
    {
        // define MongoDB connection, etc. 
        // instantiate myDoc and populate data
        var x = new myDoc
        {
            //...
            myDictionary = new Dictionary<string, object>
            {
                { "type", "something" },
                { "Vendor", new object[0] },
                { "obj1", //data for myObjForDictionary
                }
            };
        }

    }
about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

I think you're looking for the DictionarySerializationOption... which gives you a couple of different options out of the box to determine how your dictionary gets serialized.

about 4 years ago · Santiago Trujillo Report

0

You'll need to save some information (_t) of what object the deserializer needs to create when deserializing the object, if not it won't know what to create from the BSON.

Alternatively, you could change the Dictionary<string, object> to Dictionary<string, BsonDocument> and deal with the BsonDocuments directly within your code. This will be very similar to how you use JObject within Newtonsoft.Json.

about 4 years ago · Santiago Trujillo Report

0

It also happens when the passed model to mongo is not exactly the type that is defined on the model.

In this case, mongo will add _t as it identifies that you expect to read the inheritor's class type, and not the type that is defined on the model.

For example:

public class ParentClass { }

public class ChildClass : ParentClass { }

public class ModelToInsert 
{
   public ParentClass property { get; set; }
}

...
// ChildClass is passed instead of ParentClass 
collection.InsertOne(new ModelToInsert { property = new ChildClass() });
about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!