我的结构
struct task {
Id *bson.ObjectId `json:"id" bson:"_id,omitempty"`
Text string `json:"text" bson:"text,omitempty"`
// other params
}
从表单中获取数据
var task Task{}
task.Text = FORM.Text
以及我找到任务的功能
func FindOne(task Task) (Task, error) {
err := db.Session.DB("tasks").C(CollectionTask).Find(&task).One(&task)
if err != nil {
return task, err
}
return task, nil
}
从搜索表单我只得到一行text
,没有fieldid
,在这种情况下,_id - > nil和mgo(mongo)找不到not found
如何修改搜索功能或数据结构以执行正确的搜索?
这是一个基于您的代码的工作示例。它首先连接,然后插入并最终找到一个特定的字符串。正如您所看到的,如果正确插入文档,搜索功能可以正常工作。
package main
import (
"fmt"
"log"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
)
type task struct {
ID *bson.ObjectId `json:"id" bson:"_id,omitempty"`
Text string `json:"text" bson:"text,omitempty"`
// other params
}
func main() {
session, err := mgo.Dial("127.0.0.1")
if err != nil {
log.Fatal(err)
}
c := session.DB("test").C("test")
err = c.Insert(task{
Text: "Hello",
})
if err != nil {
log.Fatal(err)
}
var result task
err = c.Find(task{
ID: nil,
Text: "Hello",
}).One(&result)
if err != nil {
log.Fatal(err)
}
fmt.Println(result)
}
我检查了insert
的实现,发现行为发生了变化,没有考虑到这一点
`Status string` json: "status" `
固定在Status string 'json: "status" bson: "-"'
,一切正常