使用Storm / BoltDB时使用q.In匹配器查找对象

时间:2019-05-13 02:38:13

标签: go boltdb

我无法在问题中添加正确的标签,但是我使用的是Storm库(https://github.com/asdine/storm),但似乎无法获得q.In的效用,也许我正在做某事错误,或者我在库中遇到错误,有人可以帮忙吗?我想发布整个工作代码,但看起来Stackoverfow不再允许我了,所以只发布有问题的部分。

根据要求进行更清晰的编辑:q.In进行切片,并根据文档返回匹配的对象,但在我看来,它不返回任何内容,并且失败并显示“未找到”错误。相反,执行db.Select().Find(&a)可以按预期工作,并返回所有内容而无需任何过滤。预期的输出只是一个对象,最后一个Foo被保存,由于匹配的标签,该对象的标题为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!
            }
        }
    }
}

0 个答案:

没有答案