УПРОЩЕННЫЙ ПРИМЕР ВЫДАЧИ
Hi,
Используя 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]}]
при поиске по обоим полям
Как найти документ, соответствующий ОДНОМУ полю во встроенной структуре/документе?
Заранее спасибо!