元素查询操作符(Element Query Operators),查询文档中字段的属包括字段是否存在以及字段的数据类型。

元素操作符

作用

参数

$exists

字段是否存在

{field:{$exists:<boolean>}}

$type

选择字段值为指定BSON数据类型编号的文档

{field:{$type:<BSON type>}}

$exists实例

var db = connect("localhost:27017/test");
    
    db.col.drop();
    
    var bulk = db.col.initializeUnorderedBulkOp();
    
    // 测试数据
    
    var doc1 = {name : "joe", age : 20}
    
    bulk.insert(doc1);
    
    var doc2 = {name : "joe", age : 31}
    
    bulk.insert(doc2);
    
    var doc3 = {name : "jack", age : 21}
    
    bulk.insert(doc3);
    
    var doc4 = {name : "John", age : null}
    
    bulk.insert(doc4);
    
    //执行插入操作
    
    bulk.execute();
    
    print("========find - $exists 元素操作符的使用=======")
    
    /*
    
     $exists  查询存在(或不存在)指定字段的文档
    
     { field: { $exists: <boolean> } }
    
    */
    
    var cursor = db.col.find(
    
                    {
    
                       age: { $exists:true }   
    
                    } 
    
                );
    
    printjson(cursor.toArray())

运行结果

C:\>mongo --quiet find_exists.js
    
    ========find - $exists 元素操作符的使用=======
    
    [
    
            {
    
                    "_id" : ObjectId("56e56c6095532d414b476d17"),
    
                    "name" : "joe",
    
                    "age" : 20
    
            },
    
            {
    
                    "_id" : ObjectId("56e56c6095532d414b476d18"),
    
                    "name" : "joe",
    
                    "age" : 31
    
            },
    
            {
    
                    "_id" : ObjectId("56e56c6095532d414b476d19"),
    
                    "name" : "jack",
    
                    "age" : 21
    
            },
    
            {
    
                    "_id" : ObjectId("56e56c6095532d414b476d1a"),
    
                    "name" : "John",
    
                    "age" : null
    
            }
    
    ]

$type

$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。

MongoDB 中可以使用的类型如下表所示:

类型

数字

备注

Double

1

 

String

2

 

Object

3

 

Array

4

 

Binary data

5

 

Undefined

6

已废弃

Object id

7

 

Boolean

8

 

Date

9

 

Null

10

 

Regular Expression

11

 

JavaScript

13

 

Symbol

14

 

JavaScript (with scope)

15

 

32-bit integer

16

 

Timestamp

17

 

64-bit integer

18

 

Min key

255

Query with -1

Max key

127

 

$type使用:

var db = connect("localhost:27017/test");
     
     db.col.drop();
     
     var bulk = db.col.initializeUnorderedBulkOp();
     
     // 测试数据
     
     var doc1 = {name : "joe", age : 20}
     
     bulk.insert(doc1);
     
     var doc2 = {name : "joe", age : 31}
     
     bulk.insert(doc2);
     
     var doc3 = {name : "jack", age : 21}
     
     bulk.insert(doc3);
     
     var doc4 = {name : "John", age : null}
     
     bulk.insert(doc4);
     
     //执行插入操作
     
     bulk.execute();
     
     print("========find - $exists 元素操作符的使用=======")
     
     /*
     
      $exists  查询存在(或不存在)指定字段的文档
     
      { field: { $exists: <boolean> } }
     
     */
     
     var cursor = db.col.find(
     
                     {
     
                        age: { $type:1 }   
     
                     } 
     
                 );
     
     printjson(cursor.toArray())

运行结果:

C:\>mongo --quiet find_type.js
     
     ========find - $exists 元素操作符的使用=======
     
     [
     
             {
     
                     "_id" : ObjectId("56e56ebb16633fed001afe70"),
     
                     "name" : "joe",
     
                     "age" : 20
     
             },
     
             {
     
                     "_id" : ObjectId("56e56ebb16633fed001afe71"),
     
                     "name" : "joe",
     
                     "age" : 31
     
             },
     
             {
     
                     "_id" : ObjectId("56e56ebb16633fed001afe72"),
     
                     "name" : "jack",
     
                     "age" : 21
     
             }
     
     ]