mgo,mongodb:从嵌入式结构中查找与一个字段匹配的文档

京平金子子:

问题的简化示例

你好

使用mgo将文档插入到mongodb中,我试图将文档嵌入另一个文档中。

使用mgo我正在使用两个结构,如下所示:

type Test struct {
    InTest SubTest `bson:"in_test"`
}

type SubTest struct {
    Test1 string `bson:"test1"`
    Test2 string `bson:"test2"`
}

然后,我插入一个文档:

test := Test{InTest: SubTest{Test1: "test", Test2: "hello"}}
err = col.Insert(test)
if err != nil {
    fmt.Printf("Can't insert document: %+v\n", err)
    os.Exit(1)
}

现在,我想根据嵌入式文档中的一个字段找到此文档:

var tests []Test
err = sess.DB("test ").C("test").Find(
    bson.M{"in_test": bson.M{"test1": "test"}}).All(&tests)
if err != nil {
    fmt.Printf("Got an error finding documents %+v\n")
    os.Exit(1)
}
fmt.Printf("Found document: %+v\n", tests)

打印: Found document: []

而使用这两个字段进行搜索都会返回文档:

var tests []Test
err = sess.DB("test").C("test").Find(
    bson.M{"in_test": bson.M{"test1": "test", "test2": "hello"}}).All(&tests)
if err != nil {
    fmt.Printf("Got an error finding documents %+v\n")
    os.Exit(1)
}
fmt.Printf("Found document: %+v\n", tests)

打印: Found document: [{InTest:{Test1:test Test2:hello}}]

我也尝试过以bson.M格式插入文档,但结果相同:

type Test struct {
    InTest bson.M `bson:"in_test"`
}

test := Test{InTest: bson.M{"test1": "test", "test2": "hello"}}
err = col.Insert(test)
if err != nil {
    fmt.Printf("Can't insert document: %+v\n", err)
    os.Exit(1)
}

var tests []Test
err = sess.DB("test").C("test").Find(
    bson.M{"in_test": bson.M{"test1": "test"}}).All(&tests)
if err != nil {
    fmt.Printf("Got an error finding documents %+v\n")
    os.Exit(1)
}
fmt.Printf("Found document: %+v\n", tests)

再次打印:Found document: []或者Found document: [{InTest:map[test1:test test2:hello]}]同时搜索两个字段

如何在嵌入式结构/文档中找到与一个字段匹配的文档?

提前致谢!

OneOfOne:

您最初的问题有误导性,您需要匹配子文档:

func main() {
    sess, err := mgo.Dial("localhost")
    if err != nil {
        fmt.Printf("Can't connect to mongo, go error %v\n", err)
        os.Exit(1)
    }
    col := sess.DB("test").C("test")
    test := Test{InTest: SubTest{Test1: "test", Test2: "hello"}}
    err = col.Insert(test)
    if err != nil {
        fmt.Printf("Can't insert document: %+v\n", err)
        os.Exit(1)
    }
    var tests []Test
    err = col.Find(bson.M{"in_test.test2": "hello"}).All(&tests)
    fmt.Println(tests)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

mgo,mongodb:查找一个嵌入式文档,该文档是数组的一部分

在一个字段中按数组查找mongodb中的文档?

查找来自一个字段的值不为null且不在另一个字段中的MongoDB文档

Golang + MongoDB嵌入式类型(在另一个结构中嵌入一个结构)

C# Mongodb:如何在嵌套的文档列表中查找并选择一个字段

如何使用 nodejs 通过 objectId 和 mongodb 中的另一个字段查找文档?

是否需要,取决于一个字段-嵌入式表格Symfony2

只更改猫鼬中整个嵌入文档数组的一个字段

MongoDB $ project将嵌入式文档与另一个文档中的其他字段一起置于根级别

如何查找一个字段的值与另一个字段的值匹配的所有文档

在MongoDB中排除嵌入式文档中除单个字段之外的所有字段

MongoDB嵌入式文档数组:仅获取一个具有特定属性的嵌入式文档

Mongodb 更新文档中的一个字段,然后根据前一个字段的值更新另一个

与第二个字段相关时在一个字段中查找完全匹配

查找某个字段与数组中另一个字段进行比较的文档

使用聚合在每个文档mongodb中增加或减去一个字段

从流星中的Mongodb文档返回一个字段(数组)的内容

C#MongoDb-如何更新嵌套文档中的一个字段?

如何使用php在MongoDB文档中添加一个字段?

从mongo引擎中的另一个嵌入式文档访问嵌入式文档

Matlab结构在一个字段中查找重复项以搜索另一个字段

根据Mongodb查询中的一个字段查找最大连续记录数

根据MongoDB文档中的另一个字段更新一个字段(在Node.js中使用Mongoose)

Mongodb通过C#驱动程序使用多个字段匹配更新嵌入式文档

从MongoDB中仅选择一个字段

mongodb $ inc数组中的一个字段

从 mongoDB 集合中删除一个字段

在每个文档中添加一个新字段,并在mongodb中为同一文档的另一个字段赋值

Mongodb $ project:排除子文档中除一个字段外的所有字段,其余保留