Skip to main content

Meta Fields

Meta fields are those fields that tracks extra information about the document which can be helpful to determine the state of a document.

mgod supports the following meta fields -

We will assume the following User type for the rest of this section -

type User struct {
Name string
EmailID string `bson:"emailId"`
}

createdAt

  • Format - ISO String

It is the meta field that stores the timestamp of the document creation. This field is automatically added (if not present in the input) to the schema if the SchemaOptions.Timestamps is set to true.

Example

schemaOpts := schemaopt.SchemaOptions{
Timestamps: true,
}

userDoc := User{
Name: "Gopher",
EmailID: "gopher@mgod.com",
}

user, _ := userModel.InsertOne(context.TODO(), userDoc)

Output:

{
"_id": ObjectId("65697705d4cbed00e8aba717"),
"name": "Gopher",
"emailId": "gopher@mgod.com",
"createdAt": ISODate("2023-12-01T11:32:19.290Z"),
"updatedAt": ISODate("2023-12-01T11:32:19.290Z"),
"__v": 0
}

updatedAt

  • Format - ISO String

It is the meta field that stores the timestamp of the document updation. This field is automatically upserted (if not present in the input) to the schema if the SchemaOptions.Timestamps is set to true.

Example

schemaOpts := schemaopt.SchemaOptions{
Timestamps: true,
}

result, _ := userModel.UpdateMany(context.TODO(), bson.M{"emailId": "gopher@mgod.com"}, bson.M{"$inc": {"__v": 1}})

Output:

mongo.UpdateResult{
MatchedCount: 1,
ModifiedCount: 1,
UpsertedCount: 0,
}
// User Doc
{
"_id": ObjectId("65697705d4cbed00e8aba717"),
"name": "Gopher",
"emailId": "gopher@mgod.com",
"createdAt": ISODate("2023-12-01T11:32:19.290Z"),
"updatedAt": ISODate("2023-12-02 10:40:00.670Z"),
"__v": 1
}

__v

  • Format - Number

It is the field that stores the version of the document. This field is automatically added (if not present in the input) to the schema if the SchemaOptions.VersionKey is set to true. This field starts with a default value of 0.

Example

schemaOpts := schemaopt.SchemaOptions{
VersionKey: true
}

userDoc := User{
Name: "Gopher",
EmailID: "gopher@mgod.com",
}

user, _ := userModel.InsertOne(context.TODO(), userDoc)

Output:

{
"_id": ObjectId("65697705d4cbed00e8aba717"),
"name": "Gopher",
"emailId": "gopher@mgod.com",
"__v": 0
}

If VersionKey is set to false.

schemaOpts := schemaopt.SchemaOptions{
VersionKey: false
}

userDoc := User{
Name: "Gopher",
EmailID: "gopher@mgod.com",
}

user, _ := userModel.InsertOne(context.TODO(), userDoc)

Output:

{
"_id": ObjectId("65697705d4cbed00e8aba717"),
"name": "Gopher",
"emailId": "gopher@mgod.com"
}