MongoDB 学习记录三(查询)

in with 0 comment

查询指定字段

db.collection.find(query,options)
eg: db.collection.find({},{"_id":0,"field":1})

query --> 查询条件 options --> 需要显示的字段, "_id"属于自动生成的字段,可以设置为0,表示不显示。其他插入的字段,如果添加进来则设置为1,表示显示,不能设置为0.

排序 sort

db.collection.find().sort(options)
eg: db.collection.find({}).sort("_id":1)

1表示升序,-1表示降序

limit & skip

limit 限定查询返回个数,skip 限定跳过多少个,通常可以配合sort来实现分页功能。

db.collection.find().limit(*).skip(*)

索引

当我们的数据比较多的时候,索引的存在就是必须的了,它可以极大的加快查询进度。

db.collection.createIndex(keys,options)
eg: db.collection.createIndex({"name":1},{"backgroup":true})

这里,mongoDB自动创建的_id也是索引,不可删除,由mongo自己维护。 同排序一样,1表示升序,-1表示降序。 关于options,这里的 backgroup 声明,如果当前数据量比较大,创建索引可能会比较费时,推荐设置成true。

聚合 aggregate

db.collection.aggregate(options)
eg: db.collection.aggregate([{$group : {_id : "$_id", num:{$sum : 1}}}])
eg: db.collection.aggregate({$match:{"name":"Felix"}})

这里_id设定分组条件,之后的num...等可以输出运算结果。

aggregate的参数类似与 管道 结构,可以是一个数组,然后添加一个个的过滤器来实现数据筛选。

  1. $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  2. $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
  3. $limit:用来限制MongoDB聚合管道返回的文档数。
  4. $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  5. $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  6. $group:将集合中的文档分组,可用于统计结果。
  7. $sort:将输入文档排序后输出。
  8. $geoNear:输出接近某一地理位置的有序文档。