如何使用mgo搜索空_id

问题描述 投票:0回答:2

我的结构

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

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

mongodb go mgo
2个回答
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)
}

0
投票

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

`Status string` json: "status" `

固定在Status string 'json: "status" bson: "-"',一切正常

© www.soinside.com 2019 - 2024. All rights reserved.