2015-04-20 25 views
2

可以說我有結構類似於一個文件:更新未知家長給定蒙戈場域

datas: { 
    foo: { 
     ... 
     keytoupdate: [...] 
    }, 
    whatever: { 
     ... 
     keytoupdate: [...] 
    }, 
    anystring: { 
     ... 
     keytoupdate: [...] 
    }, 
    ...: { 
     ... 
     keytoupdate: [...] 
    } 
} 

我知道:

  • 的「DATAS」每個人的直接子屬性文件有一個「keytoupdate」字段。
  • 「數據」文檔的直接子屬性因案例而異:不一定是相同的名稱,也不一定是相同的數字。

我想更新每個「keytoupdate」字段,不管它們有多少。

問題是:我該怎麼做?有沒有像$ that does the same job for Array這樣的魔術師?

謝謝!

+1

一種解決方法是重新設計架構以這樣的方式,該鍵變成屬性值的一部分,因爲它是很難發出動態密鑰的查詢。你可能想看到這個[** SO問題**](http://stackoverflow.com/questions/29745878/mongo-match-where-object-key-is-variable)瞭解更多關於你如何去關於它 – chridam

+0

@chridam不幸的是,我不能重新設計架構,它嵌入了一個非常大的結構:s –

+0

這沒有任何意義 - 如果你不知道'keytoupdate'上面的密鑰的名稱,那麼你不'不知道你需要查詢/更新哪個字段。上述文檔中沒有'keytoupdate'字段;只有'key1.keytoupdate','key2.keytoupdate'等。你能制定你的問題,以便它適合嗎?你想要做什麼確切的查詢和/或文檔轉換? – wdberkeley

回答

2

我會回答我自己的問題:有沒有辦法做到這一點,我們不能玩動態密鑰,只是忘了它!但也有2個解決方法:

  1. 最好的解決辦法,通過@chridam的建議,就是重新設計架構,使其對象,其中的鍵是陣列的部分的數組,你可以看到this question for more details.
  2. 如果你不能,另一個(但不是好的)解決方案是爲每個可能在文檔中的字段提出請求,而不是在一個請求中嘗試這樣做。這是一個非常糟糕的解決方案,特別是如果您的文檔可能有很多字段,並且您必須知道文檔中可能包含哪些字段。 這是一個壞的解決方案,絕對不是最優化的,但它具有簡單的優點,以實現