mongo查询方法汇总

来源:互联网 发布:网络免费打电话啥软件 编辑:程序博客网 时间:2024/06/03 07:13

1,查找所有

[javascript] view plain copy
  1. coll.find();  

2,相等

[javascript] view plain copy
  1. coll.find({key: value});  
3,多个字段相等,关系且

[javascript] view plain copy
  1. coll.find({key1: value1, key2: value2});  

4,多个字段相等,关系或

[javascript] view plain copy
  1. coll.find({ $or: [{ key1: value1 },  { key1: value2 }] });  
  2. coll.find({ $or: [{ key1: value1 },  { key2: value2 }] });  

5,多个字段相等,关系或且结合

[javascript] view plain copy
  1. coll.find({ $or: [{ key1: value1 },  { key2: value2 }], key3: value3 });  

6,大于

[javascript] view plain copy
  1. coll.find({key: {$gt: value}});  
7,大于等于

[javascript] view plain copy
  1. coll.find({key: {$gte: value}});  
8,小于

[javascript] view plain copy
  1. coll.find({key: {$lt: value} });  

9,小于等于

[javascript] view plain copy
  1. coll.find({key: {$lte: value} });  

10,大于一个值,小于一个值

[javascript] view plain copy
  1. coll.find({key: {$gt: value1, $lt: value2}});  

这样子是错误的:

[javascript] view plain copy
  1. coll.find({key: {$gt: value1}, key: {$lt: value2}});  

11,不等于

[javascript] view plain copy
  1. coll.find({key: {$ne: value}});  

12,字段为空

[javascript] view plain copy
  1. coll.find({key: null});  

13,字段不为空

[javascript] view plain copy
  1. coll.find({key: {$ne: null}});  

14,值在一个数组字段中

[javascript] view plain copy
  1. coll.find({arraykey: value});  

15,值不在一个数组字段中

[javascript] view plain copy
  1. coll.find({arraykey: {$ne: value}});  

16,一个数组的每个值全部在一个数组字段中

[javascript] view plain copy
  1. coll.find({arraykey: {$all: [value1, value2]} });  

这个表示value1,value2都在arraykey中

17,字段的值为一个数组中任意一个元素的值

[javascript] view plain copy
  1. coll.find({key: {$in: [value1, value2]});  
  2. coll.find({arraykey: {$in: [value1, value2]});  

这里的字段既可以是普通字段,也可以是数组字段

18,字段的值不等于数组中任意一个元素的值

[javascript] view plain copy
  1. coll.find({key: {$nin: [ value1, value2 ] } });  

19,取模运算

[javascript] view plain copy
  1. coll.find({key: {$mod: [10, 1]});  

这个表示查找key % 10 == 1的记录

20,数组的元素个数等于

[javascript] view plain copy
  1. coll.find({arraykey: {$size: 1}});  

这个$size操作符只能判断等于,大于小于都不行,MongoDB建议增加一个字段存储arraykey的元素个数,每次更新arraykey时使用$inc来增加或减少值

21,判断是否有这个字段$exists

[javascript] view plain copy
  1. coll.find({key: {$exists: true}});  

这个表示key存在

[javascript] view plain copy
  1. coll.find(key: {$exists: false}});  

这个表示key不存在

22,判断字段类型$type

[javascript] view plain copy
  1. coll.find({key: {$type: 2}});  

这个表示key的类型是string,类型与值的对应关系参照:

http://docs.mongodb.org/manual/reference/bson-types/

23,根据正则表达式进行匹配

[javascript] view plain copy
  1. coll.find({key: /\d+/});  

这个功能很强大了,key可以是整型值,也可以使用$regex操作符,动态组装正则表达式:

[javascript] view plain copy
  1. coll.find({key: {$regex: '\\d+', $options: 'i'} });  

24,如果key存储的是一个嵌入式对象,则可以这样匹配

比如文档为:

[javascript] view plain copy
  1. {key: {key1: value1, key2: value2}}  

匹配:

[javascript] view plain copy
  1. coll.find({"key.key1": value1});  

"key.key1"相当于一个字段

但是:

[javascript] view plain copy
  1. coll.find({key: {key1: value1}})   

匹配不到,

[javascript] view plain copy
  1. coll.find({key: {key1: value1, key2: value2}});  

才能匹配到

25,匹配对象数组$elemMatch

如果字段中存储的是一个对象数组,如:

[javascript] view plain copy
  1. {key: [{key1: 1, key2: 1}, {key1: 2, key2: 2}, {key1: 10, key2: 10}]}  

则可以这样匹配:

[javascript] view plain copy
  1. coll.find({key: {$elemMatch: {key1: 1, key2: 2} } });  

这个什么都匹配不到。

注意:$elemMatch的匹配方式和以下这个是不一样的:

[javascript] view plain copy
  1. coll.find({"key.key1": 1, "key.key2": 2});  

这个可以匹配到前面那条记录。

[javascript] view plain copy
  1. coll.find({key: {$elemMatch: {key1: 1, key2: 1} } });  

这个可以匹配到。

26,$not操作符匹配不满足条件的记录

[javascript] view plain copy
  1. coll.find({key: {$not: {$lt: 2} });  

匹配key不小于2的记录,也就是说key不存在或者key大于等于2都可以匹配到。

这与

[javascript] view plain copy
  1. coll.find({key: {$gte: 2}});  

的结果不太一样,该语句只匹配key大于等于2的记录,key不存在的则匹配不到。

注意:

[javascript] view plain copy
  1. coll.find({key: {$not: 2}});  

这个是有问题的,如果只是匹配不等于某个值,应该使用:

[javascript] view plain copy
  1. coll.find({key: {$ne: 2}});  

$not操作符可以联合$mod, 正则表达式等。

27,$nor操作符匹配不满足一组条件且

[javascript] view plain copy
  1. coll.find({$nor: [ {key1: value1}, {key2: value2} ] } );  

这个匹配key1不等于value1且key2不等于value2的记录,$nor的多个条件之间是且的关系

28,$and操作符匹配满足一组条件且,和$nor相反

[javascript] view plain copy
  1. coll.find({$and: [ {key1: value1}, {key2: value2} ] });  

匹配key1等于value1,且key2等于value2的记录,当然key1和key2必须存在。

29,$text操作检索文档

[javascript] view plain copy
  1. coll.find({$text: {$search: "text1 text2"}});  

检索文档中包含text1或者text2的记录

[javascript] view plain copy
  1. coll.find({$text: {$search: "text1 text2 -text3"}});  

检索文档中包含text1或者text2,但是没有text3的记录

[javascript] view plain copy
  1. coll.find({$text: {$search: "\"text1 text2\" -text3"}});  

检索文档中包含"text1 text2",但是没有text3的记录,这里把text1 text2当作一个完整的单词对待。

30,$where操作执行JavaScript查找

这个功能就太强大了,它可以对每条记录使用javascript语句进行运算,返回true或者false,当然效率就非常低下了,不能使用索引等功能,所以最好配合其他条件一起检索,建议只要能够用其他条件的都不要使用$where。

[javascript] view plain copy
  1. coll.find({$where: "this.key1 == this.key2" });  

这里this是表示当前记录。

你也可以这样写:

[javascript] view plain copy
  1. coll.find({$where: function() { return this.key1 == this.key2;}});  


原创粉丝点击