元素查询操作符(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
}
]