如何在golang中$push嵌套数组?

2024-04-17

我尝试使用以下方法将一些数据推送到嵌套数组中$push。这是我的 json 文件

{
    "_id" : ObjectId("57307906f051147d5317984e"),
    "user" : [
        {
            "firstName" : "chetan",
            "lastName" : "kumar",
            "age" : 23,
            "sales" : [
                {
            "firstName" : "ashu",
            "lastName" : "jha",
            "age" : 27
                }
            ],
        },
        {
            "firstName" : "nepolean",
            "lastName" : "dang",
            "age" : 26
        },
        {
            "firstName" : "Raj",
            "lastname" : "kumar",
            "age" : 26
        }
    ],

}

现在这是我尝试在这里执行的 golang 代码

package main

import(
    "fmt"
    "log"
    "net/http"
        //"encoding/json"
    "github.com/gorilla/mux"
        "gopkg.in/mgo.v2"
        "gopkg.in/mgo.v2/bson"
)
type User struct{
    SALES       []Sales     `json:"sales" bson:"sales"`
    FIRSTNAME   string      `json:"firstName" bson:"firstName"`
    LASTNAME    string      `json:"lastName" bson:"lastName"`
    AGE     int     `json:"age" bson:"age"`
}
type Sales struct{
    FIRSTNAME   string      `json:"firstName" bson:"firstName"`
    LASTNAME    string      `json:"lastName" bson:"lastName"`
    AGE     int     `json:"age" bson:"age"`
}

type Details struct{
    ID  bson.ObjectId   `json:"_id" bson:"_id"`
    USER    []User      `json:"user" bson:"user"`

}


func detail(w http.ResponseWriter, r *http.Request){
    session, err := mgo.Dial("127.0.0.1")
        if err != nil {
                panic(err)
        }else{
                fmt.Println("dial")
        }
        defer session.Close()


        session.SetMode(mgo.Monotonic, true)

        c := session.DB("userdb").C("user")
        addsales:= []Sales{Sales{
            FIRSTNAME : "chetan",
            LASTNAME : "kumar",
            AGE : 24,
            },
        }
    fmt.Println(addsales)
    match := bson.M{"firstName" : "nepolean"}
    change := bson.M{"$push":bson.M{"user.$.sales":addsales}}
    err = c.Update(match,change)
    if err !=nil{
        panic(err)      
    }else{
    fmt.Println("success")
    }
}

func main(){
    router := mux.NewRouter().StrictSlash(true)
    router.HandleFunc("/detail",detail)
    log.Fatal(http.ListenAndServe(":9080", router))

}

这是我执行后的输出

/Desktop$ go run arrayupdate.go dial [{chetan kumar 24}] 2016/05/24
 12:39:48 http: panic serving 127.0.0.1:43928: not found goroutine 5
 [running]: net/http.(*conn).serve.func1(0xc820082200)
    /usr/local/go/src/net/http/server.go:1389 +0xc1 panic(0x7c6bc0,
 0xc82000b080)  /usr/local/go/src/runtime/panic.go:426 +0x4e9
 main.detail(0x7f4a62bf9900, 0xc8200735f0, 0xc8200d6000)
    /home/joybynature/Desktop/arrayupdate.go:93 +0x7a6
 net/http.HandlerFunc.ServeHTTP(0x91d9f0, 0x7f4a62bf9900, 0xc8200735f0,
 0xc8200d6000)  /usr/local/go/src/net/http/server.go:1618 +0x3a
 github.com/gorilla/mux.(*Router).ServeHTTP(0xc820012550,
 0x7f4a62bf9900, 0xc8200735f0, 0xc8200d6000)
    /home/joybynature/src/github.com/gorilla/mux/mux.go:107 +0x285
 net/http.serverHandler.ServeHTTP(0xc820082180, 0x7f4a62bf9900,
 0xc8200735f0, 0xc8200d6000)    /usr/local/go/src/net/http/server.go:2081
 +0x19e net/http.(*conn).serve(0xc820082200)    /usr/local/go/src/net/http/server.go:1472 +0xf2e created by
 net/http.(*Server).Serve   /usr/local/go/src/net/http/server.go:2137
 +0x44e

你正在推送一系列Sales具有单个项目的语法。
它应该是单个Sales要推送的对象:

addsales:= Sales{
    FIRSTNAME : "chetan",
    LASTNAME : "kumar",
    AGE : 24,
},
change := bson.M{"$push":bson.M{"user.$.sales":addsales}}

or use $each修改器推送多个项目:

addsales:= []Sales{Sales{
    FIRSTNAME : "chetan",
    LASTNAME : "kumar",
    AGE : 24,
    },
}
change := bson.M{"$push":bson.M{"user.$.sales":bson.M{"$each":addsales}}}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在golang中$push嵌套数组? 的相关文章

随机推荐

  • AVAudioPlayer 在调试模式下抛出断点

    每次我加载应用程序时 它都会停止 就像我在此行设置了断点一样 self audioPlayer AVAudioPlayer alloc initWithData dataPersister loadData self fileName er
  • 如何从 Java 系统设置中获取代理设置

    我正在寻找如何在 Windows 下使用 Java 获取系统代理信息的方法 但我只找到了一种方法 但这对我不起作用 public static void main String args throws Throwable System se
  • 红宝石数组内部结构

    ruby 数组内部是如何实现的 主要是在 CRuby 中 但欢迎任何其他信息 它们是像 C 向量一样可增长的数组还是基于列表的 移位 取消移位以及通过索引访问元素的复杂性是多少 它们是可增长的数组 在最后增长 shift is O 1 un
  • hive中每行的百分比计算

    我在配置单元中有一个具有以下架构的表 差值 int 计数值 int 值为 5 2 30 1 90 1 100 1 现在我想找到每个 count value 与 count value 总和的百分比 每行的值类似于 count value s
  • 终止设备上的调试

    我对设备上的调试有点困惑 当我使用模拟器时 在调试会话之后 我只需关闭模拟器窗口 但是在我的设备上调试时 如何关闭会话 只需断开 USB 电缆即可 并且安装的 apk 由Eclipse安装 应该手动删除 您可以通过转到 调试 视角 右键单击
  • 当 readdir() 返回文件名时,stat() 错误“没有这样的文件或目录”

    我无法识别 stat 引发的错误 下面的程序读取目录中的所有文件并打印文件名 DIR dp struct dirent dirp struct stat sb if dp opendir argv 1 NULL perror can t o
  • WPF - MVVM - 组合框选定项

    I have ViewModel 实施的INotifyPropertyChanged 在后台和类中Category它只有一个 type 属性string 我的 ComboBox SelectedItem 绑定到类别的实例 当我更改实例的值时
  • 如何更改导航视图中的分隔符颜色?

    我正在尝试使用 NavigationView 来实现 NavigationDrawer 我通过在菜单中设置组 ID 添加了分隔符 但是我看不到分隔符 我想这是因为分隔符颜色与背景相同 所以我想改变分隔符的颜色 但我找不到办法改变它 谁能帮我
  • 如何迭代大型输入文件?

    我正在尝试访问通过输入字段上传的文件内容的迭代器 我可以通过 web sys 将 JS 文件传递 到 Wasm 中 但是我一生都无法弄清楚如何访问 Rust 中传递的文件的长度和名称之外的任何内容 我想我可以将整个文件作为 ByteArra
  • Windows npm 中的 Glob 通配符

    我试图让 npm 在脚本文件夹上构建 browserify 问题是 我在 Windows 上 执行folder js 似乎不起作用 我尝试过全局安装 glob 但每当我运行构建命令时 都会返回错误 提示 找不到模块 c www projec
  • 如何从 Web 服务响应中读取 HTTP 响应标头?

    如何从 C 中的 Web 服务响应中读取 HTTP 响应标头 在深入研究 MSDN 之后 我所需要做的就是覆盖GetWebResponse方法 然后我可以访问响应头 public class MyWSProxy HttpWebClientP
  • 执行多尺度训练(yolov2)

    我想知道多尺度训练如何YOLOv2 https arxiv org pdf 1612 08242 pdf works 论文中指出 原始YOLO使用的输入分辨率为448 448 通过添加锚框 我们将分辨率更改为416 416 然而 由于我们的
  • CodeIgniter:帮助从网页获取元标记的类/库?

    我正在使用代码点火器 我想我使用哪个 php 框架并不重要 但在我编写自己的类之前 已经编写了另一个类 该类允许用户获取任何站点的页面标题和元标记 关键字 描述 如果有的话 任何能够做到这一点的 PHP 类都很棒 谢谢大家 你应该看看这个类
  • 如何设置文本字段字符限制 SwiftUI?

    我正在使用 SwiftUi 版本 2 进行应用程序开发 我遇到了 SwiftUI 中可用文本字段的问题 我不想再使用 UITextField 了 我想限制文本字段中的字符数 我搜索了很多 找到了一些与此相关的答案 但这些答案不适用于 Swi
  • Docker:基础镜像

    我试图理解 Docker 概念 但我无法理解一件事 据我了解 镜像 即容器 可以从不同的 Linux 发行版实例化 例如 Ubuntu CentOS 等 假设我在主机上运行标准 Ubuntu 14 04 What happens if I
  • 卷曲总是返回 false

    下面的代码总是回显 false 我错过了什么吗 url https www google nl ch curl init curl setopt ch CURLOPT URL url curl setopt ch CURLOPT RETUR
  • 找不到如何使用 HttpContent

    我正在尝试使用HttpContent HttpContent myContent HttpContent Create SOME JSON 但我没有找到定义它的 DLL 首先 我尝试添加对Microsoft Http也System Net
  • Scrapy 使用带有规则的 start_requests

    我找不到任何使用 start requests 与规则的解决方案 我也没有在互联网上看到任何关于这两个的示例 我的目的很简单 我想重新定义 start request 函数以获得捕获请求期间所有异常的能力 并在请求中使用元 这是我的蜘蛛的代
  • 结果在同一个文件夹中

    我尝试执行以下命令来对文件夹内找到的数据进行分析 但是 它将它们保存在我执行该行的文件夹中 如何将结果保存在文件所在的文件夹中位于 sed n 14 71p fastqc fastqc txt awk print 1 2 awk sum 2
  • 如何在golang中$push嵌套数组?

    我尝试使用以下方法将一些数据推送到嵌套数组中 push 这是我的 json 文件 id ObjectId 57307906f051147d5317984e user firstName chetan lastName kumar age 2