踩到的 Mongodb key的坑

作者: 乾九二 | 来源:发表于2015-12-31 11:01 被阅读2294次

今天服务器重启了,发现用户数据不能存档。查找后发现是由于用户数据里存在了这种类型的 map:{"a.b.c": 1 } ,在存档进mongodb时,由于服务器进行了一些处理,导致存档失败。
正常情况下这种类型的key 是可以存储进数据库的,但是会发生事与愿违的事情:

> db.test.findOne()
{ "_id" : ObjectId("528090797f6408479a607d61"), "hi" : "world" }
>
>
> db.test.insert({ "a.b.c": 1 }) 
2015-12-31T10:28:53.098+0800 E QUERY    Error: can't have . in field names [a.b.c]
    at Error (<anonymous>)
    at DBCollection._validateForStorage (src/mongo/shell/collection.js:157:19)
    at insert (src/mongo/shell/bulk_api.js:646:20)
    at DBCollection.insert (src/mongo/shell/collection.js:243:18)
    at (shell):1:9 at src/mongo/shell/collection.js:157
>
>
> db.test.update({"hi":"world" },{$set:{ "a.b.c" : 1 }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.findOne()
{
        "_id" : ObjectId("528090797f6408479a607d61"),
        "hi" : "world",
        "a" : {
                "b" : {
                        "c" : 1
                }
        }
}
>
>

可以看到这里insert根本就出错,而update被解析错了。
特意查了下MongoDB的文档,发现在MongoDB的key中不能使用的字符包括:

Windows下:/ . " $ * < > : | ?
Linux下:  / . " $

MongoDB文档

For MongoDB deployments running on Windows, MongoDB will not permit database names that include any of the following characters:
/. "$*<>:|?
Also, database names cannot contain the null character.
Restrictions on Database Names for Unix and Linux Systems
For MongoDB deployments running on Unix and Linux systems, MongoDB will not permit database names that include any of the following characters:
/. "$
Also, database names cannot contain the null character.

相关文章

  • 踩到的 Mongodb key的坑

    今天服务器重启了,发现用户数据不能存档。查找后发现是由于用户数据里存在了这种类型的 map:{"a.b.c": 1...

  • 对接工商银行支付的总结(二)

    接着下文,本文主要描述在对接过程中踩到的坑有哪些。。 一.错误列表 1.签名不通过 报错“public key v...

  • 产品经理踩坑后的吐血总结

    在项目中不止技术人员会踩到许多的坑,对产品经理来说也会踩到不少的坑。 就在这里总结工作多年来所踩到的坑,给刚刚进入...

  • 我踩到的坑

    2020年都3月份,因为疫情的影响,刚开工一周,这是我即上学以来,上班最晚的一年。也是在家里待的最久的一个假期。我...

  • kubebuilder踩到的坑

    https://xinchen.blog.csdn.net/article/details/113089414[h...

  • MongoDB基础笔记

    outline MongoDB常用命令 MongoDB的CRUD 索引 MongoDB的安装 踩坑记录 Mongo...

  • 七、rancher搭建Mongodb集群化部署:

    一.Mongodb在rancher上面部署:命令如图:mongod --keyFile /data/key/key...

  • Android Selector 踩到的坑

    今天在开发TV项目的时候突然发现Selector 的一个坑,特意分享下正常情况下,按钮状态disable 是下面这...

  • Github自身踩到的坑

    用Github有一两年了,是时候总结一下以前踩得坑了,这些坑开始时还真把自己摔得不轻!!!!!小插曲:自己以前用h...

  • React Native踩到的坑

    好久没写简书了,正好最近又比较有空就研究了一下React Native,目前也就只是按照官网上的教程搭建好了开发环...

网友评论

    本文标题:踩到的 Mongodb key的坑

    本文链接:https://www.haomeiwen.com/subject/pfnihttx.html