MongoDB自己的查询语言
SQl中的写法如
在MongoDB中有一套类似的写法,先做名称解释
为了更好的说明,现在MongoDB中插入了一条记录:
查询语句:
db.customers.find()
添加查询条件:
第一个订单中的第一个产品名称必须为iphone,同时返回的结果不显示MongoDB中自带的_id选项,只返回id与orders列
查询结果为:
其结构如下:
db.collection.find( <query filter>, <projection> )
另外,查询条件中如<,<=,in,not in,or,and,exists等如下所示:
转换成SQL为:
注意:由于MongoDB的松散的数据组织方式,所以可以存在在某一些记录中其中某一列不存在而在另一些记录中存在的情况,如最开始创建customers的时候,没有age列,随着业务的发展,需要为其添加age列,则可以直接在后面的记录添加时,加入age,查询时,前面的记录将查询不出age列,后面的记录则可以查询到。
以下为常用的表达式:
表达式 | 语义 |
---|---|
$gt | great than大于 > |
$lt | less than小于 < |
$gte | great than equals大于等于 >= |
$lte | 小于等于 <= |
$ne | not equals不等于<> |
$in | 在某一个集合里 |
$nin | 不在某一个集合中 |
$exists | 验证一个元素是否存在 |
正则表达式 | 支持 |
$elemMatch | 匹配数组内的元素 |
user.score | 查询嵌套对象的值(左为示例user列中score对象的值) |
$not | 取反 |
$all | 匹配所有 |
$size | 匹配数组大小 |
$slice | 返回数组的一个子集,即对以某属性为基础,返回多少条(范围)。也可以接受偏移值和要返回的元素数量,来返回中间的结果 |
$where | 可执行任务JavaScript作为查询的一部分,可为function也可为字符串,查询较慢 |
db.customers.find({'orders.products.product_name':'iphone'},{_id:0,id:1,'orders.products.product_name':1,'orders.products':{'$slice':-1}})
查询结果为: