技术标签: Golang strng golang 转换 MongoDB _id mongodb
直接了当的说,原生的_id 和 string 二者之间不能直接转换。非原生 _id 则因具体而定。
mongoDB 生成的 _id 是二进制数据;而不是 golang 的 string ;二进制转换成 string,必定输出乱码字符。如果写入DB时 _id 由用户生成,那么mongoDB保持原样写入DB,用户传入的类型是什么,此 _id 将是什么类型。DB不做任何修改。
mongoDB原生的 _id 查询是显示像这样
{ "_id" : ObjectId("5a6ae25f614ca7fb150ac1f6")}
中间显示的字符串是二进制的十六进制表示。同理,当查询时,传入十六进制字符串,要转换成 _id 的格式才能查询到正确结果
>db.col.find({
"_id" : ObjectId("5a6ae25f614ca7fb150ac1f6")}) //right
>db.col.find({
"_id" : "5a6ae25f614ca7fb150ac1f6"}) //查无此人
采用二进制的原因可能为了最小化存储空间吧。
读取
在golang中使用byte数组或者使用bson.ObjectId,像这样
type Info struct {
Id []byte `bson:"_id"`
}
//或者
type Info struct {
Id bson.ObjectId `bson:"_id"`
}
如果使用byte数组,则需要自己转换成十六进制,才是查询时显示的16进制字符串来使用,相比还是建议直接使用 bson.ObjectId,得到的结果就是16进制字符串。
import "encoding/hex"
//func EncodeToString(src []byte) string
id := hex.EncodeToString(info.Id)
还有一种办法就是上面说的自己生成 _id ,这个成本略微大一点,因为它需要一个唯一 id 的生成器。
查询
读取时返回 _id 的16进制字符串,那么反过来查询请求自然也需要转换,golang中如下操作
idList := make([]bson.ObjectId, len(req.Id))
for i, id := range req.Id {
idList[i] = bson.ObjectIdHex(id)
}
sel := bson.M{
"_id": bson.M{
"$in": idList}}
试题来源:牛客网试题答案仅供参考。其中前半部分偏向商务类试题,后半部分偏向运营类试题。1、京东大规模建设物流体系使得易迅、苏宁易购等其他竞争对手跟进投入,这充分表明( )是电商企业的核心竞争力之一,同时也是消费者能直接感受到的体验。选项:A. 仓储管理;B.流通加工;C.信息处理;D.物流配送答案:D2、下列( )使得电子商务的表现形式和商业路径发生根本性的转变,将线上和线下从原来的相对独立、相互冲突逐渐转化为互为促进、彼此融合,依托互联网,通过运用大数据、人工智能等先进技术手段实现商品的销售。_在客户价值分类中,对于低贡献度低成长性
我们偶尔会在一本程式中引用另一本WDA程式,这时候传参成了一件很重要的事,我用过的方法一共有三个:1)、利用interface node传参;2)、利用interface method传参;3)、利用url传参;1)、利用interface node传参;在使用wd_comp_controller->window_manager->create_and_open_popup 的方式去弹出popup框的时候,需要在调用程式中引用被调用程序的WDA Window,这时候我们可以直_sss252
第5章:网络层控制平面本章目标:理解网络层控制平面的工作原理 传统路由选择算法 SDN 控制器 ICMP:Internet Control Message Protocol 网络管理(略)以及它们在互联网上的实例和实现: OSPF, BGP, OpenFlow, ODL 和ONOS控制器, ICMP, SNMP5.1 导论网络层功能回顾:2个网络层功能:转发:将分组从路由器的一数据平面个输入端口移到合适的输出端口路由:确定分组从源到目标控制平面的路径2种构建网络
可以这样理解:controller层-----> service层(接口—>接口实现类) -----> dao层的.mapper文件 -----> 和mapper层里的.xml文件对应Model层是数据层: TableName是对数据表实体的映射; Criteria传输前台数据..._service传入dao层或者dao层传入service层是dto吗
题目描述输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数。本题包含多组输入。输入描述:输入一行字符串,可以有空格输出描述:统计其中英文字符,空格字符,数字字符,其他字符的个数示例1输入:1qazxsw23 edcvfr45tgbn hy67uj m,ki89ol.\\/;p0-=\\][输出:2631012解题思路(1)循环遍历输入的字符串的每个字符(2)用isalpha()函数判断英文字符(3)用isdigit(_牛客网hj40
Cocos2d-x项目创建之 静态库生成_cocos2dx lunix linking cxx static library ../../../lib/libjscocos2d.a
官网:http://jagt.github.io/clumsy/index.html官网上的介绍已经很易懂了,所以本文只是直接翻译了官网内容。clumsy 能在 Windows 平台下人工造成不稳定的网络状况,方便你调试应用程序在极端网络状况下的表现。简介利用封装 Winodws Filtering Platform 的WinDivert 库, clumsy 能实时的将系统接..._网络状况环境软件
实验简述: 1、为方便起见,图中R1和R2分别由三层交换机来代替; 2、PC1和PC3分别用真机实现,但PC2和PC4分别用换回接口来实现;实验器材: 两台H3C S3610三层交换机实验目标:1、 分别用静态路由、RIP、OSPF实现全网互通2、 通过聚合的方式将路由表的大小控制在最小的范围内(..._华三rip ospf 静态路由
smarty + ajax 实现二级动态级联菜单 网上很多js实现的二级级联但是都是把数据静态存在js的数组里面下面是我的地区动态二级级联菜单数据表结构area_id mediumint(8)area_pid mediumint(8)area_name _ajax动态菜单
LM358是常用的双运放,这里我们介绍一下他的一些资料以及简单电路应用等,有什么问题请去电子论坛.简介: LM358里面包括有两个高增益、独立的、内部频率补偿的双运放,适用于电压范围很宽的单电源,而且也适用于双电源工作方式,它的应用范围包括传感放大器、直流增益模块和其他所有可用单电源供电的使用运放的地方使用。〈lm358引脚图及引脚功能〉LM358封装有塑封8引线..._lm358p应用电路图
一、功能需求分析在开始编码之前,需要先对程序进行需求分析,想一想带密码功能的日记本中应该具备哪些功能。将这些功能全部整理出来之后,才好动手去一一实现。这里我认为在带密码功能的日记本中至少应该具备以下功能。1. 可以创建一篇新的日记。2. 可以查看你已经写好的日记。3. 可以自由地搜索你已经写好了的日记。4. 可以对你写的日记进行加密,保护你的个人隐私。5. 如果你觉得以前哪
扫描器实验报告by Sandy &Sabrina目录扫描器实验报告... 1一. 实验目标... 2二. 实验要求... 2三. 实验分析... 21. 正则表达式... 22. NFA. 33. 状态转换表... 34. DFA. 4四....