2012-04-20 65 views
2

我公司目前有以下數據集(簡體)2個字段匹配:蒙戈查詢必須在1子

{ 
    'component_id':1, 
    '_locales':[ 
     { 
      'url': 'dutch', 
      'locale': 'nl_NL' 
     }, 
     { 
      'url': 'english', 
      'locale': 'en_US' 
     } 
    ] 
} (etc more rows similar to this but unique urls) 

現在我想執行一個查詢,以查看是否在en_US「網址「英語存在:

db.find({'_locales.locale':'en_US','_locales.url':'english'}) 

這確實爲我提供了數據集的行。但是,如果我想檢查是否爲地區'nl_NL'url'english';

db.find({'_locales.locale':'nl_NL','_locales.url':'english'}) 

我仍然得到它,我不想因爲查詢shoudln't匹配的數據集回來。因爲現在我只希望它匹配如果語言環境是nl_NL和同一行的URL是「英語」

我試圖

db.find({'_locales.locale':'en_US','_locales.$.url':'english'}) 

這沒有工作,有沒有辦法在這樣做所有?以便它分別匹配1行中的2個字段而不是2個字段?

任何幫助表示讚賞!使用$elemMatch

db.find({'_locales': { '$elemMatch': { 'locale': 'nl_NL', 'url': 'english' } }}); 

$elemMatch

回答

4

嘗試用於當在陣列中的單個元件必須在匹配表達式匹配。否則(如你所見),每個標準可以匹配不同的數組元素。

+0

謝謝!那完美的工作! – 2012-04-20 09:36:27

+0

@WimWisselink:不客氣,歡迎來到Stack Overflow!如果這個答案解決了您的問題,那麼您可以將其標記爲已接受的答案。這會使您的「接受答案」比例保持較高水平,這對您而言是件好事。 – 2012-04-20 09:41:18