是否有可能在查詢中通配符?例如,考慮下面的記錄,我喜歡做.find({'a.*': 4})
這是這裏https://jira.mongodb.org/browse/SERVER-267討論,但它看起來像它沒有得到解決。MongoDB通配符在查詢中的鍵
{
'a': {
'b': [1, 2],
'c': [3, 4]
}
}
是否有可能在查詢中通配符?例如,考慮下面的記錄,我喜歡做.find({'a.*': 4})
這是這裏https://jira.mongodb.org/browse/SERVER-267討論,但它看起來像它沒有得到解決。MongoDB通配符在查詢中的鍵
{
'a': {
'b': [1, 2],
'c': [3, 4]
}
}
如問,這是不可能的。您鏈接到的服務器問題仍在「我們不確定的問題」。
MongoDB中具有一定的智能周邊數組的使用,我認爲這是周圍這樣的功能複雜的一部分。
以下面的查詢db.foo.find({ 'a.b' : 4 })
。該查詢將匹配以下文檔。
{ a: { b: 4 } }
{ a: [ { b: 4 } ] }
那麼在這裏做什麼「通配符」? db.foo.find({ a.* : 4 })
它與第一個文檔相匹配嗎?第二個呢?
此外,這是什麼意思的語義?正如您所描述的,查詢實際上是「查找文檔中該文檔中任何字段的值爲4」的文檔「。這有點不尋常。
是否有一個特定的語義,你想達到什麼目的?也許文檔結構的變化會讓你得到你想要的查詢。
謝謝,澄清。更具體地說,我期望做的是通配符,只是分支中的特定節點,即a的任何合適的子字段。我不清楚如何。*說'找到任何領域'。是不是'找到具有與4'匹配的子字段的頂級字段'a'的文檔? – Brad 2011-06-01 05:48:23
我認爲這裏的困惑是圍繞「子領域」。當我寫'{a:{b:4,c:2}}'時,我的意思是'a'的值是一個JSON對象。那個JSON對象有兩個鍵'b'和'c'。這些密鑰的值分別是4和2。當你要求'a。*'時,你實際上要求的語法循環遍歷該JSON對象中的所有鍵。你不要求*「循環訪問一個數組」*,你要求*「遍歷一個對象的屬性」*。這有點不尋常,這就是爲什麼我在這裏要求一個特定的用例。 – 2011-06-01 17:15:19
@gates:我有一個用例。 myDocInMongo = {'someUnknownKey':{propToCheck:true},'someKnownKey':true}; 現在,我想使用選擇器{someKnownKey:{$ exists:true}}來查找此文檔,但我也想確保其他任何鍵都不具有屬性propToCheck的對象。因此,如下所示: {'* .propToCheck':{$ exists:false},{someKnownKey:{$ exists:true}}} – doubletap 2012-05-03 17:57:25
我與mongo有同樣的問題。我有很多這樣的文檔:{one:{two:{more:data},{more:data}}} 一旦你進入文檔樹一級,第二級的每個節點都是一個容器對於結構一致的文檔。所以我想能夠像這樣搜索:find({'one。*。some.data':5}) – rev 2012-01-05 20:41:25