前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB 常用操作笔记 find ,count, 大于小于不等, select distinct, groupby,索引

MongoDB 常用操作笔记 find ,count, 大于小于不等, select distinct, groupby,索引

作者头像
大鹅
发布2021-06-16 17:18:24
3.7K0
发布2021-06-16 17:18:24
举报

文章目录

  • 1. 大于,小于,大于或等于,小于或等于,不等于2. value是否在List中:in 和 not in3. 判断元素是否存在 exists4. select distinct的实现:5. 查询嵌入对象的值6. 数组大小匹配 size7. 全部匹配

本博客将列举一些常用的MongoDB操作,方便平时使用时快速查询,如find, count, 大于小于不等, select distinct, groupby等

1. 大于,小于,大于或等于,小于或等于,不等于

  • $gt: 大于
  • $lt: 小于
  • $gte: 大于或等于
  • $lte: 小于或等于
  • $ne: 不等于
代码语言:javascript
复制
// greater than : field > value
db.collection.find({ "field" : { $gt: value } } ); 

// less than : field < value
db.collection.find({ "field" : { $lt: value } } ); 

// greater than or equal to : field >= value
db.collection.find({ "field" : { $gte: value } } ); 

// less than or equal to : field <= value
db.collection.find({ "field" : { $lte: value } } ); 

// not equal: field != value
db.collection.find( { "field" : { $ne : value } } );

也可以合并在一条语句内:

代码语言:javascript
复制
// value1 < field < value
db.collection.find({ "field" : { $gt: value1, $lt: value2 } } ); 

2. value是否在List中:in 和 not in

代码语言:javascript
复制
db.collection.find( { "field" : { $in : array } } );
代码语言:javascript
复制
db.things.find({j:{$in: [2,4,6]}});
db.things.find({j:{$nin: [2,4,6]}});

3. 判断元素是否存在 $exists

$exists用来判断一个元素(field)是否存在:

代码语言:javascript
复制
db.things.find( { a : { $exists : true } } ); 
db.things.find( { a : { $exists : false } } ); 

4. select distinct的实现:

5. 查询嵌入对象的值

代码语言:javascript
复制
db.postings.find( { "author.name" : "joe" } );

注意用法是author.name

代码语言:javascript
复制
db.blog.save({ title : "My First Post", author: {name : "Jane", id : 1}})

如果我们要查询 authors name 是Jane的, 我们可以这样:

代码语言:javascript
复制
db.blog.findOne({"author.name" : "Jane"})

如果不用点,那就需要用下面这句才能匹配:

代码语言:javascript
复制
db.blog.findOne({"author" : {"name" : "Jane", "id" : 1}})

6. 数组大小匹配 $size

$size是匹配数组内的元素数量的,如有一个对象:{a:[“foo”]},他只有一个元素:

下面的语句就可以匹配:

代码语言:javascript
复制
db.things.find( { a : { $size: 1 } } );

7. 全部匹配 $all

all和in类似,但是他需要匹配条件内所有的值:

如有一个对象:

{ a: [ 1, 2, 3 ] } 下面这个条件是可以匹配的:

db.things.find( { a: { $all: [ 2, 3 ] } } ); 但是下面这个条件就不行了:

db.things.find( { a: { $all: [ 2, 3, 4 ] } } );

8. 正则表达式

mongo支持正则表达式,如:

代码语言:javascript
复制
// 后面的i的意思是区分大小写
db.customers.find( { name : /acme.*corp/i } ); 

9. group的实现

10. forEach

举例:可以用于复制collection

代码语言:javascript
复制
db.test(复制源表).find().forEach(function(x){
    db.target(目的表).insert(x);
})

11. 索引

单字段索引 (Single Field Index)
代码语言:javascript
复制
    db.person.createIndex( {age: 1} ) 

上述语句针对age创建了单字段索引,其能加速对age字段的各种查询请求,是最常见的索引形式,MongoDB默认创建的id索引也是这种类型。

{age: 1} 代表升序索引,也可以通过{age: -1}来指定降序索引,对于单字段索引,升序/降序效果是一样的。

复合索引 (Compound Index)

复合索引是Single Field Index的升级版本,它针对多个字段联合创建索引,先按第一个字段排序,第一个字段相同的文档按第二个字段排序,依次类推,如下针对age, name这2个字段创建一个复合索引。

代码语言:javascript
复制
    db.person.createIndex( {age: 1, name: 1} ) 
多key索引 (Multikey Index)

当索引的字段为数组时,创建出的索引称为多key索引,多key索引会为数组的每个元素建立一条索引,比如person表加入一个habbit字段(数组)用于描述兴趣爱好,需要查询有相同兴趣爱好的人就可以利用habbit字段的多key索引。

代码语言:javascript
复制
{"name" : "jack", "age" : 19, habbit: ["football, runnning"]}
db.person.createIndex( {habbit: 1} )  // 自动创建多key索引
db.person.find( {habbit: "football"} )
查询索引
代码语言:javascript
复制
mongo-9552:PRIMARY> db.person.getIndexes() // 查询集合的索引信息
[
    {
        "ns" : "test.person",  // 集合名
        "v" : 1,               // 索引版本
        "key" : {              // 索引的字段及排序方向
            "_id" : 1           // 根据_id字段升序索引
        },
        "name" : "_id_"        // 索引的名称
    }
]

Ref

  1. momgo agg 操作http://www.runoob.com/mongodb/mongodb-aggregate.html
  2. https://www.cnblogs.com/zhouxuchen/p/5136446.html
  3. https://docs.mongodb.com/manual/aggregation/
  4. https://yq.aliyun.com/articles/33726
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 大于,小于,大于或等于,小于或等于,不等于
  • 2. value是否在List中:in 和 not in
  • 3. 判断元素是否存在 $exists
  • 4. select distinct的实现:
  • 5. 查询嵌入对象的值
  • 6. 数组大小匹配 $size
  • 7. 全部匹配 $all
  • 8. 正则表达式
  • 9. group的实现
  • 10. forEach
  • 11. 索引
    • 单字段索引 (Single Field Index)
      • 复合索引 (Compound Index)
        • 多key索引 (Multikey Index)
          • 查询索引
          • Ref
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档