你好,游客 登录 注册 搜索
背景:
阅读新闻

MongoDB文档中字段是否有先后顺序之分?

[日期:2016-06-13] 来源:Linux社区  作者:majinggogogo [字体: ]

在这片文章中,简单谈谈关于Mongodb中字段先后顺序的问题。Mongodb中的文档是一种Key:Value对组成的Json字符串,按理说,字段的先后顺序是不应该影响到查询操作的。

我们简单做个实验,往集合中插入一条记录:

db.testcollection.insert({"apple":2, "banana":3});
这时候,我们通过以下两种方式查询都是一样的:

第一种方式:

db.testcollection.find({"apple":2,"banana":3})
第二种方式:

db.testcollection.find({"banana":3,"apple":2})
通过上面两种方式查询都可以查询出来结果,都是同一条记录。那是否就可以说明,字段顺序是没有区别的呢?别着急,我们再看一个例子。

比方我们在集合中插入了下面一条记录:

db.testcollection.insert({"type":"fruit", "detail":{"apple":2, "banana":3}});
此时我们和上面一样,采用两种方式进行查询:

第一种方式:

db.testcollection.find({"detail":{"apple":2,"banana":3}})
第二种方式:

db.testcollection.find({"detail":{"banana":3,"apple":2}})
从两种查询方式的结果来看,其实结果是不一样的,第一种方式查询到了结果,但是第二种方式是没有查询到结果的。从这个实例来看,就可以告诉我们,当我们在查询具有嵌套文档的集合中,还是要稍微注意一点的,否则很有可能就会出现上面的情况。

我们如何避免出现上面这样因为书写顺序而导致的查询结果不一样的情况呢?有个办法,那就是在查询时不要使用json字符串进行查询,在这种具有嵌套文档的集合中,可以使用点符号进行操作,我们采用下面两种方式进行查询。

第一种方式:

db.testcollection.find({"detail.apple":2,"detail.banana":3})
第二种方式:

db.testcollection.find({"detail.banana":3,"detail.apple":2})
通过结果可以知道,这两种方式查询出来的结果是一样的,由此可见,不管是对于简单的查询,还是对于具有嵌套文档的查询,不在查询字符串中对字段值使用Json串书写格式,而是使用点号进行嵌套引用查询才是比较合适的做法,可以防止因书写字段顺序和文档中的字段顺序不一样导致的查询错误。

更多MongoDB相关教程见以下内容

CentOS 编译安装 MongoDB与mongoDB的php扩展 http://www.linuxidc.com/Linux/2012-02/53833.htm

CentOS 6 使用 yum 安装MongoDB及服务器端配置 http://www.linuxidc.com/Linux/2012-08/68196.htm

Ubuntu 13.04下安装MongoDB2.4.3 http://www.linuxidc.com/Linux/2013-05/84227.htm

MongoDB入门必读(概念与实战并重) http://www.linuxidc.com/Linux/2013-07/87105.htm

Ubunu 14.04下MongoDB的安装指南 http://www.linuxidc.com/Linux/2014-08/105364.htm

《MongoDB 权威指南》(MongoDB: The Definitive Guide)英文文字版[PDF] http://www.linuxidc.com/Linux/2012-07/66735.htm

Nagios监控MongoDB分片集群服务实战 http://www.linuxidc.com/Linux/2014-10/107826.htm

基于CentOS 6.5操作系统搭建MongoDB服务 http://www.linuxidc.com/Linux/2014-11/108900.htm

MongoDB 的详细介绍请点这里
MongoDB 的下载地址请点这里

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-06/132248.htm

linux
相关资讯       MongoDB字段  MongoDB字段先后顺序 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款