mongodb判断null值

How do I query for fields that have null values?

Fields in a document may store null values, as in a notional collection, test, with the following documents:

{ _id: 1, cancelDate: null }
{ _id: 2 }

Different query operators treat null values differently:

  • The { cancelDate : null } query matches documents that either contains the cancelDate field whose value is null orthat do not contain the cancelDate field:

    db.test.find( { cancelDate: null } )
    

    The query returns both documents:

    { "_id" : 1, "cancelDate" : null }
    { "_id" : 2 }
    
  • The { cancelDate : { $type: 10 } } query matches documents that contains the cancelDate field whose value is nullonly; i.e. the value of the cancelDate field is of BSON Type Null (i.e. 10) :

    db.test.find( { cancelDate : { $type: 10 } } )
    

    The query returns only the document that contains the null value:

    { "_id" : 1, "cancelDate" : null }
    
  • The { cancelDate : { $exists: false } } query matches documents that do not contain the cancelDate field:

    db.test.find( { cancelDate : { $exists: false } } )
    

    The query returns only the document that does not contain the cancelDate field:

    { "_id" : 2 }
    

See also

 

The reference documentation for the $type and $exists operators.


$type

$type

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

$type selects the documents where the value of the field is the specified BSON type.

Consider the following example:

db.inventory.find( { price: { $type : 1 } } )

This query will select all documents in the inventory collection where the price field value is a Double.

If the field holds an array, the $type operator performs the type check against the array elements and not the field.

Consider the following example where the tags field holds an array:

db.inventory.find( { tags: { $type : 4 } } )

This query will select all documents in the inventory collection where the tags array contains an element that is itself an array.

If instead you want to determine whether the tags field is an array type, use the $where operator:

db.inventory.find( { $where : "Array.isArray(this.tags)" } )

See the SERVER-1475 for more information about the array type.

Refer to the following table for the available BSON types and their corresponding numbers.

TypeNumber
Double1
String2
Object3
Array4
Binary data5
Undefined (deprecated)6
Object id7
Boolean8
Date9
Null10
Regular Expression11
JavaScript13
Symbol14
JavaScript (with scope)15
32-bit integer16
Timestamp17
64-bit integer18
Min key255
Max key127

MinKey and MaxKey compare less than and greater than all other possible BSON element values, respectively, and exist primarily for internal use.

Note

To query if a field value is a MinKey, you must use the $type with -1 as in the following example:

db.collection.find( { field: { $type: -1 } } )

Example

Consider the following example operation sequence that demonstrates both type comparison and the special MinKey and MaxKey values:

db.test.insert( {x : 3});
db.test.insert( {x : 2.9} );
db.test.insert( {x : new Date()} );
db.test.insert( {x : true } );
db.test.insert( {x : MaxKey } )
db.test.insert( {x : MinKey } )

db.test.find().sort({x:1})
{ "_id" : ObjectId("4b04094b7c65b846e2090112"), "x" : { $minKey : 1 } }
{ "_id" : ObjectId("4b03155dce8de6586fb002c7"), "x" : 2.9 }
{ "_id" : ObjectId("4b03154cce8de6586fb002c6"), "x" : 3 }
{ "_id" : ObjectId("4b031566ce8de6586fb002c9"), "x" : true }
{ "_id" : ObjectId("4b031563ce8de6586fb002c8"), "x" : "Tue Jul 25 2012 18:42:03 GMT-0500 (EST)" }
{ "_id" : ObjectId("4b0409487c65b846e2090111"), "x" : { $maxKey : 1 } }

To query for the minimum value of a shard key of a sharded cluster, use the following operation when connected to the mongos:

use config
db.chunks.find( { "min.shardKey": { $type: -1 } } )

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值