2011-03-20 75 views
140

我現在在使用mongodb。如何檢查數組字段是否包含MongoDB中的唯一值或其他數組?

我有blogpost集合,blogpost有一個標籤,它是一個數組,例如,

blogpost1.tags = ['tag1', 'tag2', 'tag3', 'tag4', 'tag5'] 
blogpost2.tags = ['tag2', 'tag3'] 
blogpost3.tags = ['tag2', 'tag3', 'tag4', 'tag5'] 
blogpost4.tags = ['tag1', 'tag4', 'tag5'] 

我怎樣才能做到這些searchs

  1. 包含 '標記1'
  2. 包含[ 'TAG1', '標籤2'],
  3. 包含任何[ '標籤3' 的,「TAG4 「]

回答

218

嘗試了這一點:

db.blogpost.find({ 'tags' : 'tag1'}); //1 
db.blogpost.find({ 'tags' : { $all : [ 'tag1', 'tag2' ] }}); //2 
db.blogpost.find({ 'tags' : { $in : [ 'tag3', 'tag4' ] }}); //3 
+6

這是在幫助中詳細記錄:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24all – 2011-03-20 04:31:23

+2

爲$ all是否意味着所有元素AND以表達順序或是它只是無序? – redben 2011-03-26 14:36:49

+2

@ScottHernandez我沒有看到他們提到你用作搜索的領域可以是一個數組,以及如何處理。 「field:{$ in:array}」。在數組數組中搜索數組時會發生什麼?未標明。 – Zut 2012-08-14 21:13:30

5

我的經驗是,(2)以下的解決方案比一個以「$所有」快多了:

db.blogpost.find({ $and: [ {tags: 'tag1'} ,{tags: 'tag2'} ] }); 

但說實話,我不知道不爲什麼。如果有人知道,我會感興趣。

+1

順便說一句,只是在索引關鍵字列表中測試它。與$和和$全部相同的結果 – isox 2013-02-06 13:21:00

+0

也許在此期間隨新版本發生變化。 – heinob 2013-02-06 17:26:30

+0

這是間接的。對於「$和」,mongodb做出合乎邏輯的「和」操作。因此,如果第一個表達式是錯誤的,則不考慮第二個表達式。這意味着更少的處理。 – kubudi 2013-03-16 10:49:02

相關問題