Skip to content

Virtuals

Virtuals are document properties that you can get and set but that do not get persisted to MongoDB. They are typically used for computed properties on documents.

Defining Virtuals

You can define a virtual using VirtualDef on a schema.

userSchema.Virtual("FullName", goose.VirtualDef{
    Get: func(doc any) (any, error) {
        user := doc.(*User)
        return user.FirstName + " " + user.LastName, nil
    },
    Set: func(doc any, val any) error {
        user := doc.(*User)
        parts := strings.Split(val.(string), " ")
        if len(parts) >= 2 {
            user.FirstName = parts[0]
            user.LastName = parts[1]
        }
        return nil
    },
})

JSON Serialization

Virtuals can be included when serializing documents to JSON, making them useful for API responses.