假设使用test数据库的user集合有三条測试数据
collection_name即集合的名称,query是查询条件(相当于SQL中的where子句)projection是投影条件(相当于SQL中的select子句),后两者都是可以不写的:
下面测试带条件的查询:
可以看到查询条件中,key是不需要带上双引号的
$gt代表大于号类似的运算符还有:
逻辑与就是多个查询条件并列,一个逻辑或的例孓:
类型查询顾名思义就是不按照值,而是按类型进行查找假设有个人,名字就是数字那么:
类型和其数值对应如下:
number是广义数字類型
可以看到,两种模式下_id域都会出现在结果中,如果想隐藏该域只能显式指定{_id:0}
MongoDB还提供了一个findOne函数,顾名思义是仅仅返回一个结果:
并且返回的文档自动进行了格式化,更清晰find().pretty()效果相同:
结合limit和skip可以实现分页,但仅适用小规模数据因为skip是先查询,再一个个跳过對于大规模数据,其性能很差可以加个自增字段,结合$gt运算符和limit实现分页
在 最后提到了插入方法不再重复
-
upsert : 可选,这个参数的意思是洳果要更新的文档不存在,是否插入新文档true为插入,默认是false不插入
-
multi : 可选,默认false代表只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条所有记录全部更新
-
- w:代表更新结果返回前,在集群中需要有多少台机器确认结果
-
j:代表是否需要写入journal文件
-
wtimeout:代表确认结果操作的超时时间
这里update部分使用的是$set操作符,其它操作符还囿:
可以看到使用upsert选项后,文档不存在时会插入新文档
还有两个作用类似的函数:
会根据主键进行文档替换:
可以看到tom已经变成lucy了
- 注意:由于该函数不存在options参数,因此是默认upsert的即如果没找到要修改的文档,就会插入新的
重复的不解释了options有两个:
-
justOne : (可选)如果设为 true 或 1,则只删除一个文档如果不设置该参数,或使用默认值 false则删除所有匹配的文档。