常用命令

查找

  1. 查找指定的值
    • db.test.find({name:”Bob”})
  2. 大于小于
  1. db.collection.find({ "field" : { $gt: value } } ); // 大于: field > value
  2. db.collection.find({ "field" : { $lt: value } } ); // 小于: field < value
  3. db.collection.find({ "field" : { $gte: value } } ); // 大于等于: field >= value
  4. db.collection.find({ "field" : { $lte: value } } ); // 小于等于: field <= value
  1. 不等于
    • db.test.find({“name”:{“$ne”:”Jon”}})
  2. 被包含于
    • db.test.find({age:{“$in”:[1,2,3,4,5]}}) // 如果是不同类型的,见下
    • db.test.find({“age”:{“$in”:[123,”afff”]})
  3. 都不包含于
    • db.test.find({“age”:{“$nin”:[1,2,3]}}) // 1 2 3 都没包含的
  4. age大于19并且小于45的记录
    • db.users.find({ age : { $gt: 19, $lt: 45} });
  5. 包含于其中一种
    • db.test.find({“$or”:[{“age”:3},{name:”A”}]})
  6. “$not”是元条件,可以用在任何其他条件上之上,$mod会将查询的值除以第一个给定值,若余数等于第二个给定的值则匹配成功
    • db.test.find({age:{“$mod”:[4,2]}})
      9. $not可以用在任何其他条件上之上,$mod会将查询的值除以第一个给定值,若余数不等于第二个给定的值则匹配成功
    • db.test.find({age:{“$not”:{“$mod”:[4,2]}}})
  7. 既要有app又有banana的文档,可以使用”$all”来查询
    • db.test.find({fruit:{$all:[“apple”,”banana”]}})
  8. $slice操作符 例如现有一个博客的文章,我们希望返回前面10条评论
    • db.test.posts.findOne(criteria,{“comment”:{“$slice”:10}})
  9. 如果是后10条,换成-10就好了,$slice也可以指定偏移值以及希望返回的元素数量,来返回元素集合中间位置的某些结果,比如以下代码会跳过前23个元素,返回第24-33个元素,如果数组不够的话,则返回第23个元素之前的所有元素
    • db.test.posts.findOne(criteria,{“comment”:{“$slice”:[23,10]}})
  10. 查询嵌套文档
    • db.test.find({“name.last”:”Schmoe”,”name.first”:”Jon”}) 这样的话就不用管顺序的,不然的话顺序出错的话肯定就不能查询出来结果了
  11. 假如设有博客文章若干,要找到有Job发表的5分以上的评论
    • db.blog.find({“commits”:{“$element”:{“author”:”job”,”score”:{“$gte”:5}}}})
    • $element将限定条件进行分组,仅当需要对一个内嵌文档的多个键操作时才会用到
  12. limit和skip和sort一般用来分页,比如,查找mp3,每页显示50个,通过价格降序排序
    • db.stock.find({“desc”:”mp3”}).limit(50).skip(50).sort({“price”:-1})
  13. $exists判断字段是否存在
    • db.users.find({age: {$exists: true}}); //不存在的就false
  14. Null空值处理 // 比如sex 为null
    • db.users.find({sex:{“$in”:[null], “$exists”:true}});
  15. 查询age 取模10 等于0 的数据
    • db.student.find( { age: { $mod : [ 10 , 0 ] } } )
  16. $size数组元素个数 //特定数组
    • db.users.find({favorite_number: {$size: 3}})
  17. $regex正则表达式匹配
    • db.users.find({name: {$regex: /^B.*/}}); // 查询name字段以b开头的记录

其他

  1. mongo分片?
    • 分片是将数据水平切分到不同的物理节点。当应用数据越来越大的时候,数据量也会越来越大。当数据量增长时,单台机器有可能无法存储数据或可接受的读取写入吞吐量。
      利用分片技术可以添加更多的机器来应对数据量增加以及读写操作的要求。
  2. mongodb排序优先级从小到大
    • 最小值
    • null
    • 数字(整型,长整型,双精度)
    • 字符串
    • 对象/文档
    • 数组
    • 二进制数
    • 对象ID
    • 布尔值
    • 日期型
    • 时间戳
    • 正则表达式
    • 最大值

  1. 使用数据库(如果没有的话就自动创建数据库)
    • use test
  2. 查看数据库
    • show dbs
  3. 插入数据
    1. db.test.insert({“name”:”aaa”})
      • 注意:batchinsert()方式在3.2之后的版本似乎已废除