mongo查詢方法彙總

官方文檔:

http://docs.mongodb.org/manual/reference/operator/query/


1,查找所有

coll.find();

2,相等

coll.find({key: value});
3,多個字段相等,關係且

coll.find({key1: value1, key2: value2});

4,多個字段相等,關係或

coll.find({ $or: [{ key1: value1 },  { key1: value2 }] });
coll.find({ $or: [{ key1: value1 },  { key2: value2 }] });

5,多個字段相等,關係或且結合

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

6,大於

coll.find({key: {$gt: value}});
7,大於等於

coll.find({key: {$gte: value}});
8,小於

coll.find({key: {$lt: value} });

9,小於等於

coll.find({key: {$lte: value} });

10,大於一個值,小於一個值

coll.find({key: {$gt: value1, $lt: value2}});

這樣子是錯誤的:

coll.find({key: {$gt: value1}, key: {$lt: value2}});

11,不等於

coll.find({key: {$ne: value}});

12,字段爲空

coll.find({key: null});

13,字段不爲空

coll.find({key: {$ne: null}});

14,值在一個數組字段中

coll.find({arraykey: value});

15,值不在一個數組字段中

coll.find({arraykey: {$ne: value}});

16,一個數組的每個值全部在一個數組字段中

coll.find({arraykey: {$all: [value1, value2]} });

這個表示value1,value2都在arraykey中

17,字段的值爲一個數組中任意一個元素的值

coll.find({key: {$in: [value1, value2]});
coll.find({arraykey: {$in: [value1, value2]});

這裏的字段既可以是普通字段,也可以是數組字段

18,字段的值不等於數組中任意一個元素的值

coll.find({key: {$nin: [ value1, value2 ] } });

19,取模運算

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

這個表示查找key % 10 == 1的記錄

20,數組的元素個數等於

coll.find({arraykey: {$size: 1}});

這個$size操作符只能判斷等於,大於小於都不行,mongodb建議增加一個字段存儲arraykey的元素個數,每次更新arraykey時使用$inc來增加或減少值

21,判斷是否有這個字段$exists

coll.find({key: {$exists: true}});

這個表示key存在

coll.find(key: {$exists: false}});

這個表示key不存在

22,判斷字段類型$type

coll.find({key: {$type: 2}});

這個表示key的類型是string,類型與值的對應關係參照:

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

23,根據正則表達式進行匹配

coll.find({key: /\d+/});

這個功能很強大了,key可以是整型值,也可以使用$regex操作符,動態組裝正則表達式:

coll.find({key: {$regex: '\\d+', $options: 'i'} });

24,如果key存儲的是一個嵌入式對象,則可以這樣匹配

比如文檔爲:

{key: {key1: value1, key2: value2}}

匹配:

coll.find({"key.key1": value1});

"key.key1"相當於一個字段

但是:

coll.find({key: {key1: value1}}) 

匹配不到,

coll.find({key: {key1: value1, key2: value2}});

才能匹配到

25,匹配對象數組$elemMatch

如果字段中存儲的是一個對象數組,如:

{key: [{key1: 1, key2: 1}, {key1: 2, key2: 2}, {key1: 10, key2: 10}]}

則可以這樣匹配:

coll.find({key: {$elemMatch: {key1: 1, key2: 2} } });

這個什麼都匹配不到。

注意:$elemMatch的匹配方式和以下這個是不一樣的:

coll.find({"key.key1": 1, "key.key2": 2});

這個可以匹配到前面那條記錄。

coll.find({key: {$elemMatch: {key1: 1, key2: 1} } });

這個可以匹配到。

26,$not操作符匹配不滿足條件的記錄

coll.find({key: {$not: {$lt: 2} });

匹配key不小於2的記錄,也就是說key不存在或者key大於等於2都可以匹配到。

這與

coll.find({key: {$gte: 2}});

的結果不太一樣,該語句只匹配key大於等於2的記錄,key不存在的則匹配不到。

注意:

coll.find({key: {$not: 2}});

這個是有問題的,如果只是匹配不等於某個值,應該使用:

coll.find({key: {$ne: 2}});

$not操作符可以聯合$mod, 正則表達式等。

27,$nor操作符匹配不滿足一組條件且

coll.find({$nor: [ {key1: value1}, {key2: value2} ] } );

這個匹配key1不等於value1且key2不等於value2的記錄,$nor的多個條件之間是且的關係

28,$and操作符匹配滿足一組條件且,和$nor相反

coll.find({$and: [ {key1: value1}, {key2: value2} ] });

匹配key1等於value1,且key2等於value2的記錄,當然key1和key2必須存在。

29,$text操作檢索文檔

coll.find({$text: {$search: "text1 text2"}});

檢索文檔中包含text1或者text2的記錄

coll.find({$text: {$search: "text1 text2 -text3"}});

檢索文檔中包含text1或者text2,但是沒有text3的記錄

coll.find({$text: {$search: "\"text1 text2\" -text3"}});

檢索文檔中包含"text1 text2",但是沒有text3的記錄,這裏把text1 text2當作一個完整的單詞對待。

30,$where操作執行javascript查找

這個功能就太強大了,它可以對每條記錄使用javascript語句進行運算,返回true或者false,當然效率就非常低下了,不能使用索引等功能,所以最好配合其他條件一起檢索,建議只要能夠用其他條件的都不要使用$where。

coll.find({$where: "this.key1 == this.key2" });

這裏this是表示當前記錄。

你也可以這樣寫:

coll.find({$where: function() { return this.key1 == this.key2;}});


發佈了111 篇原創文章 · 獲贊 15 · 訪問量 60萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章