Method | Function | |
---|---|---|
✔️ | db.collection.count() |
collection.Count() |
✔️ | db.collection.delete() |
collection.Delete() |
✔️ | db.collection.find() |
collection.Find() |
✔️ | db.collection.findMany() |
collection.FindMany() |
✔️ | db.collection.insert() |
collection.Insert() |
✔️ | db.collection.replaceOne() |
collection.Replace() |
Mongo in Docker is useful for testing purposes. Please, check *_test.go
files in the /collection
directory for
examples.
package main
import (
"context"
"entrlcom.dev/mongox/docker"
)
func main() {
ctx := context.Background()
mongo, err := docker.NewMongo(ctx)
if err != nil {
// TODO: Handle error.
return
}
defer func() {
// TODO: Handle error.
_ = mongo.Shutdown(ctx) //nolint:errcheck // OK.
}()
client := mongo.GetClient()
// ...
}
Operator | Function | |
---|---|---|
❌ | $all |
|
✔️ | $elemMatch |
query.ElemMatch() |
❌ | $size |
Operator | Function | |
---|---|---|
❌ | $bitsAllClear |
|
❌ | $bitsAllSet |
|
❌ | $bitsAnyClear |
|
❌ | $bitsAnySet |
Operator | Function | |
---|---|---|
✔️ | $eq |
query.Eq() |
✔️ | $gt |
query.Gt() |
✔️ | $gte |
query.Gte() |
✔️ | $in |
query.In() |
✔️ | $lt |
query.Lt() |
✔️ | $lte |
query.Lte() |
✔️ | $ne |
query.Ne() |
✔️ | $nin |
query.Nin() |
Operator | Function | |
---|---|---|
❌ | $exists |
|
❌ | $type |
Operator | Function | |
---|---|---|
❌ | $expr |
|
❌ | $jsonSchema |
|
❌ | $mod |
|
❌ | $regex |
|
❌ | $text |
|
❌ | $where |
Operator | Function | |
---|---|---|
❌ | box |
|
❌ | center |
|
❌ | centerSphere |
|
❌ | geoIntersects |
|
❌ | geoWithin |
|
❌ | geometry |
|
❌ | maxDistance |
|
❌ | minDistance |
|
❌ | near |
|
❌ | nearSphere |
|
❌ | polygon |
Operator | Function | |
---|---|---|
✔️ | $and |
query.And() |
✔️ | $or |
query.Or() |
✔️ | $nor |
query.Nor() |
✔️ | $not |
query.Not() |
Operator | Function | |
---|---|---|
❌ | $addToSet |
|
❌ | $each |
|
❌ | $pop |
|
❌ | $position |
|
❌ | $pull |
|
❌ | $pullAll |
|
❌ | $push |
|
❌ | $slice |
|
❌ | $sort |
Operator | Function | |
---|---|---|
❌ | $bit |
Operator | Function | |
---|---|---|
❌ | $currentDate |
|
❌ | $inc |
|
❌ | $max |
|
❌ | $min |
|
❌ | $mul |
|
❌ | $rename |
|
❌ | $set |
|
❌ | $setOnInsert |
|
❌ | $unset |
package main
import (
"context"
"time"
"entrlcom.dev/mongox/collection"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
type Person struct {
DataOfBirth time.Time `bson:"data_of_birth,omitempty"`
Name string `bson:"name,omitempty"`
TimeCreated time.Time `bson:"time_created,omitempty"`
}
type Repository struct {
client *mongo.Client
collection *mongo.Collection
}
func (x Repository) Create(ctx context.Context, person Person) error {
return collection.Insert[Person](x.collection).Insert(ctx, person)
}
func NewRepository(client *mongo.Client) Repository {
return Repository{
client: client,
collection: client.Database("example").Collection("person"),
}
}
func main() {
ctx := context.Background()
client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://127.0.0.1:27017"))
if err != nil {
// TODO: Handle error.
return
}
repository := NewRepository(client)
if err := repository.Create(ctx, Person{
DataOfBirth: time.Date(2020, time.May, 15, 0, 0, 0, 0, time.UTC),
Name: "John Doe",
TimeCreated: time.Now().UTC(),
}); err != nil {
// TODO: Handle error.
return
}
// ...
}
package main
import (
"entrlcom.dev/mongox/operator/query"
)
func main() {
filter := query.And(
query.Or(
query.Eq().Field("name").String("Jane"),
query.Eq().Field("name").String("John"),
),
query.Eq().Field("id").String("1"),
)
// {
// "$and": [
// {
// "$or": [
// {
// "name": {
// "$eq": "Jane"
// }
// },
// {
// "name": {
// "$eq": "John"
// }
// }
// ]
// },
// {
// "id": {
// "$eq": "1"
// }
// }
// ]
// }
}