MongoDB常用操作符

$eq:匹配字段值等于指定值的文档

$gt:匹配字段值大于指定值的文档

$gte:匹配字段值大于等于指定值的文档

$lt:匹配字段值小于指定值的文档

$lte:匹配字段值小于等于指定值的文档

$ne:匹配字段值不等于指定值的文档,包括没有这个字段的文档

$in :匹配字段值等于指定数组中的任何值

$nin :字段值不在指定数组或者不存在

$or :文档至少满足其中的一个表达式

$not :字段值不匹配表达式或者字段值不存在

$nor:字段值不匹配所有的表达式的文档,包括那些不包含这些字段的文档

扫描二维码关注公众号,回复: 10224831 查看本文章

$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添加多个值到数组中

发布了111 篇原创文章 · 获赞 0 · 访问量 2078

猜你喜欢

转载自blog.csdn.net/weixin_38932035/article/details/105139484