1.查询文档find介绍 mongodb中使用find来进行查询.find的第一个参数决定了要返回哪些文档,这个参数是一个文档,用于指定查询条件.如果不指定条件默认就是{},那么就是查询所有文档. db . test . find () { _id : objectid ( 573c858c323f7f2e2ccb0e17 ), name
1.查询文档find介绍mongodb中使用find来进行查询.find的第一个参数决定了要返回哪些文档,这个参数是一个文档,用于指定查询条件.如果不指定条件默认就是{},那么就是查询所有文档.> db.test.find(){ _id : objectid(573c858c323f7f2e2ccb0e17), name : brent, age : 43, status : done }{ _id : objectid(573c86d3017c5eb7d08aed6d), name : bob, age : 1, status : done }{ _id : objectid(573c88fe017c5eb7d08aed6e), name : tom, age : 10, status : done }{ _id : objectid(573c8bd3323f7f2e2ccb0e18), name : brent, age : 30, status : done }
向查询中指定键值,意味着限定查询条件,查询简单的类型只要指定要查找的值就行了:> db.test.find({name:brent}){ _id : objectid(573c858c323f7f2e2ccb0e17), name : brent, age : 43, status : done }{ _id : objectid(573c8bd3323f7f2e2ccb0e18), name : brent, age : 30, status : done }
可以在查询中指定多个键值对,以逗号隔开,这样的意思是条件1 and 条件2 and ....的意思:> db.test.find({name:brent,age:43}){ _id : objectid(573c858c323f7f2e2ccb0e17), name : brent, age : 43, status : done }
指定返回的键有时并不是需要返回所有的键,这时可以通过指定find或者findone的第二个参数来指定想要的键,例如只想查询name为brent的name和age键:> db.test.find({name:brent},{name:1,age:1}){ _id : objectid(573c858c323f7f2e2ccb0e17), name : brent, age : 43 }{ _id : objectid(573c8bd3323f7f2e2ccb0e18), name : brent, age : 30 }
默认情况下_id都是会返回的,也可以使用第二个参数来剔除某个键,例如我们不希望得到status的键:> db.test.find({name:brent},{status:0}){ _id : objectid(573c858c323f7f2e2ccb0e17), name : brent, age : 43 }{ _id : objectid(573c8bd3323f7f2e2ccb0e18), name : brent, age : 30 }
使用这种方法还可以将_id列剔除:> db.test.find({name:brent},{status:0,_id:0}){ name : brent, age : 43 }{ name : brent, age : 30 }
限制查询传递的参数必须是常量,例如如果想查询一个文档中的某两个列相等的情况是不行的.2.查询条件查询除了上面简单介绍的精确匹配,还有更加复杂的查询,比如范围查询,or,and,取反等等查询条件$lt,$lte,$gt,$gte就是全部的比较操作符.分别对应着=,可以将这些组合起来以便查找一个范围的值.例如下面的例子查找age大于20小于30的文档:> db.test2.find(){ _id : objectid(573e72449e178b5475b29d89), name : brent, age : 28 }{ _id : objectid(573e73149e178b5475b29d8a), name : brent, age : 10 }{ _id : objectid(573e73ae9e178b5475b29d8b), name : bob, age : 14 }
> db.test2.find({age:{$gt:20,$lt:30}}){ _id : objectid(573e72449e178b5475b29d89), name : brent, age : 28 }
对于文档的键值不等于某个特定的值,就要使用$ne了,他表示不相等.下面例子要查找name不等于brent的用户:> db.test2.find({name:{$ne:brent}}){ _id : objectid(573e73ae9e178b5475b29d8b), name : bob, age : 14 }
or查询有两种方式进行or查询:$in可以用来查询一个键的多个值,$or可以在多个键中查询任意给定的值.例如下面要查询age为10,14的文档:> db.test2.find({age:{$in:[10,14]}}){ _id : objectid(573e73149e178b5475b29d8a), name : brent, age : 10 }{ _id : objectid(573e73ae9e178b5475b29d8b), name : bob, age : 14 }
使用$in的时候,可以指定不同类型的条件和值,如果$in的数组只有一个值,那么和直接匹配是一样的.$in和nin是相对的,nin返回数组中不匹配的文档.查询age不为10,14的文档:> db.test2.find({age:{$nin:[10,14]}}){ _id : objectid(573e72449e178b5475b29d89), name : brent, age : 28 }
$in只能对单个键做or查询,如果想对多个键做匹配or查询那么可以使用$or,$or接受一个包含所有可能的数组作为条件.例如下面这个查询name为bob或者age为10的文档:> db.test2.find({$or:[{name:bob},{age:10}]}){ _id : objectid(573e73149e178b5475b29d8a), name : brent, age : 10 }{ _id : objectid(573e73ae9e178b5475b29d8b), name : bob, age : 14 }
还可以将$or和in联合起来使用:
> db.test2.find({$or:[{age:{$in:[10,28]}},{name:bob}]}){ _id : objectid(573e72449e178b5475b29d89), name : brent, age : 28 }{ _id : objectid(573e73149e178b5475b29d8a), name : brent, age : 10 }{ _id : objectid(573e73ae9e178b5475b29d8b), name : bob, age