Skip to content

Commit

Permalink
#10 add files to database
Browse files Browse the repository at this point in the history
  • Loading branch information
David Rauh committed Feb 6, 2023
1 parent 4629662 commit e7d96f8
Show file tree
Hide file tree
Showing 4 changed files with 118 additions and 8 deletions.
4 changes: 4 additions & 0 deletions cmd/mb3dbtool/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ func main() {
panic(err)
}
}
err = db.AddRecords(mbfiles)
if err != nil {
println("Could not add records: " + err.Error())
}
if mbfiles == nil {
panic("No files found")
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/database/db_interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ type MB3Database interface {
Disconnect() error
GetRecord(*string) (massbank.Massbank, error)
GetRecords(filters Filters, limit uint64) ([]massbank.Massbank, error)
AddRecords(records []massbank.Massbank) error
AddRecords(records []*massbank.Massbank) error
UpdateRecords(records []massbank.Massbank, add bool) (uint64, error)
AddRecord(record massbank.Massbank) error
AddRecord(record *massbank.Massbank) error
UpdateRecord(record massbank.Massbank, add bool) error
}
47 changes: 41 additions & 6 deletions pkg/database/mongodb.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package database

import (
"errors"
"github.com/MassBank/MassBank3/pkg/massbank"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"golang.org/x/net/context"
"log"
"strconv"
)

Expand All @@ -30,19 +33,37 @@ func (db *Mb3MongoDB) GetRecords(filters Filters, limit uint64) ([]massbank.Mass
panic("implement me")
}

func (db *Mb3MongoDB) AddRecords(records []massbank.Massbank) error {
//TODO implement me
panic("implement me")
func (db *Mb3MongoDB) AddRecords(records []*massbank.Massbank) error {
if db.database == nil {
return errors.New("database not ready")
}
var recordsI = make([]interface{}, len(records))
for i, record := range records {
recordsI[i] = record
}
_, err := db.database.Collection("massbank").InsertMany(context.Background(), recordsI)
if err != nil {
log.Println(err)
return err
}
return nil
}

func (db *Mb3MongoDB) UpdateRecords(records []massbank.Massbank, add bool) (uint64, error) {
//TODO implement me
panic("implement me")
}

func (db *Mb3MongoDB) AddRecord(record massbank.Massbank) error {
//TODO implement me
panic("implement me")
func (db *Mb3MongoDB) AddRecord(record *massbank.Massbank) error {
if db.database == nil {
return errors.New("database not ready")
}
_, err := db.database.Collection("massbank").InsertOne(context.Background(), *record)
if err != nil {
log.Println(err)
return err
}
return nil
}

func (db *Mb3MongoDB) UpdateRecord(record massbank.Massbank, add bool) error {
Expand Down Expand Up @@ -118,9 +139,23 @@ func (db *Mb3MongoDB) Connect() error {
db.database = mongoDb
db.dirty = false
}
db.init()
return db.database.Client().Ping(ctx, nil)
}

func (db *Mb3MongoDB) init() error {
opt := options.IndexOptions{}
_, err := db.database.Collection("massbank").Indexes().CreateOne(context.Background(),
mongo.IndexModel{bson.D{{"accession", 1}},
opt.SetName("accession_1").SetUnique(true)})
indeces := []string{"compound.names", "compound.mass", "compound.formula", "acquisition.instrumenttype", "acquisition.massspectrometry.ION_MODE", "acquisition.massspectrometry.MS_TYPE"}
for _, index := range indeces {
db.database.Collection("massbank").Indexes().CreateOne(context.Background(), mongo.IndexModel{bson.D{{index, 1}}, &options.IndexOptions{}})

}
return err
}

func (db *Mb3MongoDB) Disconnect() error {
return db.database.Client().Disconnect(context.TODO())
}
71 changes: 71 additions & 0 deletions pkg/massbank/bson.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package massbank

import (
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/bsontype"
"time"
)

func (p StringProperty) MarshalBSONValue() (bsontype.Type, []byte, error) {
return bson.MarshalValue(p.string)
}

func (p SubtagProperty) MarshalBSONValue() (bsontype.Type, []byte, error) {
m := map[string]string{p.subtag: p.string}
return bson.MarshalValue(m)
}

func (p DatabaseProperty) MarshalBSONValue() (bsontype.Type, []byte, error) {
m := map[string]string{p.Database: p.Identifier}
return bson.MarshalValue(m)
}

func (p RecordDeprecated) MarshalBSONValue() (bsontype.Type, []byte, error) {
return bson.MarshalValue(struct {
Date time.Time
reason string
}{p.Date, p.Reason})
}

func (p RecordDate) MarshalBSONValue() (bsontype.Type, []byte, error) {
return bson.MarshalValue(struct {
updated time.Time
created time.Time
}{p.Updated, p.Created})
}

func (p RecordAuthorNames) MarshalBSONValue() (bsontype.Type, []byte, error) {
return bson.MarshalValue(p.value)
}

func (p ChCompoundClasses) MarshalBSONValue() (bsontype.Type, []byte, error) {
return bson.MarshalValue(p.value)
}

func (p ChMass) MarshalBSONValue() (bsontype.Type, []byte, error) {
return bson.MarshalValue(p.value)
}

func (p SpLineage) MarshalBSONValue() (bsontype.Type, []byte, error) {
return bson.MarshalValue(p.value)
}

func (p PkPeak) MarshalBSONValue() (bsontype.Type, []byte, error) {
return bson.MarshalValue(struct {
Header []string
Mz []float64
Intensity []float64
Rel []uint
}{p.Header, p.Mz, p.Intensity, p.Rel})
}

func (p PkNumPeak) MarshalBSONValue() (bsontype.Type, []byte, error) {
return bson.MarshalValue(p.Value)
}

func (p PkAnnotation) MarshalBSONValue() (bsontype.Type, []byte, error) {
return bson.MarshalValue(struct {
Header []string
Values map[string][]interface{}
}{p.Header, p.Values})
}

0 comments on commit e7d96f8

Please sign in to comment.