Поиск объектов с помощью q.In matcher при использовании Storm / BoltDB - PullRequest
0 голосов
/ 13 мая 2019

Я не могу добавить правильный тег к вопросу, но я использую библиотеку Storm (https://github.com/asdine/storm), и я не могу заставить q.In работать, возможно, я что-то делаюнеправильно, или, может быть, я обнаружил ошибку в библиотеке, может кто-нибудь помочь, пожалуйста? Я хотел опубликовать весь рабочий код, но похоже, что Stackoverfow больше не позволит мне, так что просто опубликовать оскорбительную часть.

Редактирование для большей ясности в соответствии с запросом: q.In берет фрагмент и возвращает совпадающие объекты в соответствии с документацией, но в моем случае ничего не возвращает и завершается с ошибкой «not found». Выполнение db.Select().Find(&a) вместо этого работает как положенои возвращает все без какой-либо фильтрации. Ожидаемый результат - только один объект, последний сохраненный Foo, тот, у которого есть Title = Doler из-за соответствующего тега.

package main

import (
    "fmt"
    "log"

    "github.com/asdine/storm"
    "github.com/asdine/storm/q"
)

type Foo struct {
    Id    int64    `storm:"id,increment"`
    Title string   `storm:"index"`
    Tags  []string `storm:"index"`
}

func main() {
    if db, e := storm.Open("db/test.db"); e != nil {
        log.Fatal("Couldn't open database")
    } else {
        defer db.Close()

        db.Save(&Foo{Title: "Lorem", Tags: []string{"foo", "bar"}})
        db.Save(&Foo{Title: "Ipsum", Tags: []string{"foo", "bax"}})
        db.Save(&Foo{Title: "Doler", Tags: []string{"quux", "baz"}})



        { 
            var a []Foo
            if e := db.Select(q.In("Tags", []string{"quux"})).Find(&a); e != nil {
                panic(e) // yikes, doesn't work!
            }
        }
    }
}
...