如何使用mgo搜索空_id

时间:2017-12-20 22:20:55

标签: mongodb go mgo

我的结构

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,没有字段id,在这种情况下,_id - > nil和mgo(mongo)找不到not found

如何修改搜索功能或数据结构以执行正确的搜索?

2 个答案:

答案 0 :(得分:0)

这是一个基于您的代码的工作示例。它首先连接,然后插入并最终找到一个特定的字符串。正如您所看到的,如果正确插入文档,搜索功能可以正常工作。

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)
}

答案 1 :(得分:0)

我检查了insert的实现,发现行为发生了变化,没有考虑到这个

`Status string` json: "status" `

已修复Status string 'json: "status" bson: "-"',一切正常