$eq:匹配字段值等于指定值的文档
$gt:匹配字段值大于指定值的文档
$gte:匹配字段值大于等于指定值的文档
$lt:匹配字段值小于指定值的文档
$lte:匹配字段值小于等于指定值的文档
$ne:匹配字段值不等于指定值的文档,包括没有这个字段的文档
$in :匹配字段值等于指定数组中的任何值
$nin :字段值不在指定数组或者不存在
$or :文档至少满足其中的一个表达式
$not :字段值不匹配表达式或者字段值不存在
$nor:字段值不匹配所有的表达式的文档,包括那些不包含这些字段的文档
$type:匹配字段值为指定数据类型的文档
Type | Number | 备注 |
---|---|---|
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 |
db.inventory.insertMany([
{ _id: 1, item: null },
{ _id: 2 }
])
下面的语句会查询到所有的两条记录
db.inventory.find( { item: null } )
下面的语句会查询到 { _id: 1, item: null }
db.inventory.find( { item : { $type: 10 } } )
$exists:< boolean> 等于true时,字段存在,包括字段值为null的文档
#{item: {$exists: false}查询匹配不包含item字段的文档:
db.inventory.find( { item : { $exists: false } } )
该查询仅返回不包含item字段的文档。
$mod :匹配字段值被除有指定的余数的文档
$regex :正则表达式可以匹配到的文档
$text :针对创建了全文索引的字段进行文本搜索
$where :可以通过js表达式或js函数来查询文档
$all :字段值是包含所有指定元素的数组的文档
$elemMatch:数组字段至少一个元素满足所有指定查询条件的文档
$size:匹配数组字段元素个数等于指定数量的文档
$ (projection):限定查询结果中指定数组字段返回满足条件的第一个元素
$elemMatch (projection):限定查询结果中指定数组字段返回满足条件的第一个元素
$slice (projection):控制指定数组字段返回元素个数
假设一个文档的内嵌数组 arr 长度为10,其中数据 分别是 1-10 :
{
_id:1000,
arr : {
1,2,3,4,5,6,7,8,9,10
}
}
现在来说明 $slice 用法:
正常用法和 limit 分页查询 区别不大 如
db.col.find( {_id:1000},
{
"arr":{
$slice : [0,5]
}
}
)
结果为 1,2,3,4,5
下面看看 倒序取值
db.col.find( {_id:1000},
{
"arr":{
$slice : [-1,5]
}
}
)
结果为 10
db.col.find( {_id:1000},
{
"arr":{
$slice : [-5,5]
}
}
)
结果为 6 7 8 9 10
$inc:给一个字段增加指定值
$setOnInsert :upsert为true时,有插入文档操作时插入指定字段值
$unset :删除指定字段
$min :指定值小于当前值则更新为指定值
$max:指定值大于当前值则更新为指定值
$currentDate :设置字段值为当前日期
$:更新指定数组的第一个元素
项目数组值
收集学生包含以下文档:
{ "_id" : 1, "semester" : 1, "grades" : [ 70, 87, 90 ] }
{ "_id" : 2, "semester" : 1, "grades" : [ 90, 88, 92 ] }
{ "_id" : 3, "semester" : 1, "grades" : [ 85, 100, 90 ] }
{ "_id" : 4, "semester" : 2, "grades" : [ 79, 85, 80 ] }
{ "_id" : 5, "semester" : 2, "grades" : [ 88, 88, 92 ] }
{ "_id" : 6, "semester" : 2, "grades" : [ 95, 90, 96 ] }
在下面的查询中,投影{“grades.$”:1}仅返回grades字段中大于或等于85的第一个元素。
db.students.find( { semester: 1, grades: { $gte: 85 } },
{ "grades.$": 1 } )
返回结果如下:
{ "_id" : 1, "grades" : [ 87 ] }
{ "_id" : 2, "grades" : [ 90 ] }
{ "_id" : 3, "grades" : [ 85 ] }
尽管数组字段等级可能包含多个大于或等于85的元素,但是$投影运算符仅返回数组中的第一个匹配元素。
$addToSet:数组字段增加一个值
$pop:删除数组字段中的第一个或最后一个元素
$pullAll :删除数组字段中所有指定值,如果指定值为数组,则删除匹配数组内的元素
$pull :符合条件的值将被删除
$pushAll :向数组中追加多个指定值
$push :向数组中追加值
$each:用于 $addToSet添加多个值到数组中