1- If you need to remove rows with field e.g. time > t + 10
from the MongoDB, you do't need $add
, you may use:
info, err := c.RemoveAll(bson.M{"time": bson.M{"$gt": t + 10}})
if err != nil {
panic(err)
}
Here is the working code:
package main
import (
"fmt"
"time"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
)
func main() {
session, err := mgo.Dial("localhost")
if err != nil {
panic(err)
}
defer session.Close()
session.SetMode(mgo.Monotonic, true) // Optional. Switch the session to a monotonic behavior.
c := session.DB("test").C("Model")
c.DropCollection()
t := time.Now().UTC().Unix()
err = c.Insert(
&Model{bson.NewObjectId(), "n1", t},
&Model{bson.NewObjectId(), "n2", t + 50},
&Model{bson.NewObjectId(), "n3", t + 100},
&Model{bson.NewObjectId(), "n4", t + 150})
if err != nil {
panic(err)
}
r := []Model{}
err = c.Find(nil).All(&r)
if err != nil {
panic(err)
}
fmt.Println(r)
info, err := c.RemoveAll(bson.M{"time": bson.M{"$gt": t + 10}})
if err != nil {
panic(err)
}
fmt.Println(info)
r2 := []Model{}
err = c.Find(nil).All(&r2)
if err != nil {
panic(err)
}
fmt.Println(r2)
}
type Model struct {
ID bson.ObjectId `json: "_id,omitempty" bson: "_id,omitempty"`
Name string `json: "name" bson: "name"`
Time int64 `json: "time" bson: "time"`
}
output:
[{ObjectIdHex("57f7354cc3176906c0ca7516") n1 1475818828} {ObjectIdHex("57f7354cc3176906c0ca7517") n2 1475818878} {ObjectIdHex("57f7354cc3176906c0ca7518") n3 1475818928} {ObjectIdHex("57f7354cc3176906c0ca7519") n4 1475818978}]
&{0 3 3 <nil>}
[{ObjectIdHex("57f7354cc3176906c0ca7516") n1 1475818828}]
2- For $add
, see:
Query where sum of two fields is less than given value
https://docs.mongodb.com/manual/reference/operator/aggregation/add/