db.map.find([query],[fields]) - query is an optional query filter. fields is optional set of fields to return.
e.g. db.map.find( {x:77} , {name:1, x:1} )
db.map.find(...).count()
db.map.find(...).limit(n)
db.map.find(...).skip(n)
db.map.find(...).sort(...)
以上是官方给出的解释。
下面来做一些例子。
首先先来看一下集合的构成。
find的第一个参数,是查询条件,第二个是用来人为的定义,显示哪些文档,比如_id:0就代表不现实_id列,
这里就显示name和age列。0:代表不显示,1:代表显示。
$gt:大于,$gte:大于等于,$lt:小于,$lte:小于等于,$ne:不等于。
为了弥补没有等于的缺陷,可以使用$exists来替代。
$in 用来指定某些参数的范围,但是是针对一个参数,只要在集合里面即可。而$all则是指定该参数要全部符合。$or则是可以指定不同参数的不同条件。
上图表明了,要么name是lili,要么age是21或者22,是关于2个不同列的条件查询。
mongodb还支持正则表达。
这里使用/lili/匹配所有有lili字符串的文档。而且正则也可以匹配自己。比如文档中有一列 叫 /lili/的 也可以匹配到。
limit(a)限定显示的a行,skip(b)为跳过b行,
$slice[2,1]表示跳过前面字段数组中的,2个,显示后面的一个
但是像上面的school这个例子,他在school下面还有3个school数组,可以通过school.school来显示,但是会发生只要匹配其中一个就陈功的问题,所以需要使用$elemMatch来进行精确的属组匹配。切记在"x.x"前后要加入双引号。要加入双引号!
可以看到下面一段,直接查询,其实我们想要查询的是,一组数据为[school:"L",score:"K"]的,但显然是没有的,但是却返回了值,说明他只是拿他做了分别查询。查询到school有L的,score有K的,而不管是不是一组。
而前一段的$elemMatch就是进行了精确的 数据匹配。