好,如上所示,我们新插入了20条文档, 如果查询name为"李文凯1号"的文档,我们来这样做: 我们刚才讲了,find()方法的第一个参数为要查询的文档所要满足的条件,第二个参数为要显示的键名或者不要显示的键名, 那么好,我们就会使用find()方法了: db.user.find({"name":"李文凯1号"},{"_id":0}); 这就类似于我们的SQL语句: SELECT
name,age,alias,girlfriend,hobby,baobiao FROM user where
name="李文凯1号" 这样就不会显示"_id"键,其他键都会显示。 说到这里,第二个参数是"key":0或者1,0代表不显示,1代表显示,如果加了"name":1,则除了"_id"和"name",其他键都不会显示,也就是说"_id"如果不设为0,则默认会显示。 下面,我们把条件复杂化一些来看: 例如: 我们要查询age大于30并且小于40的所有用户,find()方法应该怎么写? SQL语句: SELECT
* FROM user WHERE age>30 MongoDB语句: db.user.find({"age":{'$gt':30,'$lt':40}}) 如上所示:
”大于“我们使用$gt
”小于“我们使用$lt
同理,”大于等于“和”小于等于“我们分别使用”$gte“和”$lte“
而”不等于“我们使用”$ne“ 注意:在MongoDB当中,没有”$eq“,”等于“我们使用的是冒号":" 如果我们要满足name为”李文凯1号“或者name为”李文凯5号“的文档,要怎么做: 在SQL语句中: SELECT * FROM user WHERE name="李文凯1号" or
name=”李文凯5号“ 或者: SELECT
* FROM user WHERE name in("李文凯1号","李文凯5号") 那在MongoDB当中: db.user.find({"name":{'$in':["李文凯1号","李文凯5号"]}}) 如上所示,MongoDB当中的$in的功能与SQL语句当中的in的功能是一样的,语法结构为: "key":{$in:[值1,值2,值3,........]} 同样,$nin的语法结构与$in的语法结构完全相同,但意思完全相反。 又如: 我们需要查询name为”李文凯1号“或者age为大于等于30的用户,要怎么做? 在SQL语句当中: SELECT
* FROM user WHERE name="李文凯1号" or age>=30 在MongoDB当中,显然我们使用$in已经满足不了我们的需求,因此我们可以使用$or: db.user.find({'$or':[{"name":"李文凯1号"},{"age":{'$gte':30}}]}) 这里的$or与SQL语句当中的or作用相同, 这里要注意:$or后面是两个不同的键,并且用数组的形式传递,数组的每一个元素是不同的键要满足的不同条件的对象, 因此$or语法结构为: '$or':[{"key1":条件},{"key2":条件},{"key3":条件}] 那么同样,我们可以使用$or来满足上例的需求: db.user.find({'$or':[{"name":"李文凯1号"},{"name":"李文凯5号"}]}) 我们来总结一下: $in和$nin主要针对同一键的值的或关系 $or主要针对不同键的值的或关系,同样可以针对同一键的值的或关系 接下来,我们再看,倘若我们要满足一下需求: 我们要找出所有年龄为偶数的用户文档对象,该怎么做? SQL语句中: SELECT
* FROM user WHERE age%2=0 在MongoDB当中,我们可以使用$mod: db.user.find({"age":{'$mod':[2,0]}}) 取奇数可以这样: db.user.find({"age":{'$mod':[2,1]}}) 或者: db.user.find({"age":{'$not':{'$mod':[2,0]}}}) 由此可见,MongoDB中的$not是取反的意思,也就是偶数取反,即为奇数。 下面,如果我们插入一条新文档: