2013-02-05 37 views
1

我遇到了一個問題,那就是我需要更新包含在較大數組中的特定字段中的特定字段,該字段與MongoDB v2.2.3中的某些條件相匹配。滿足條件的子數組的MongoDB更新字段

我有以下mongodb示例文檔。

{ 
    _id: ObjectId("50be30b64983e5100a000009"), 
    user_id: 0 
    occupied: { 
    Greece: [ 
     { 
     user_id: 3, 
     deadline: ISODate("2013-02-08T19:19:28Z"), 
     fulfilled: false 
     }, 
     { 
     user_id: 4, 
     deadline: ISODate("2013-02-16T19:19:28Z"), 
     fulfilled: false 
     } 
    ], 
    Italy: [ 
     { 
     user_id: 2, 
     deadline: ISODate("2013-02-15T19:19:28Z"), 
     fulfilled: false 
     } 
    ] 
    } 
} 

occupied數組中的每個國家都有自己的一組數組。

我想要做的是找到user_id爲0的文檔,只搜索occupied.Greece數組,只對"deadline": {$gt: ISODate(current-date)}的元素進行搜索,並將其各個「已完成」字段更改爲true。

我曾嘗試$$elemMatch運營商,但它們匹配只有一個,在查詢第一,數組元素,而我需要它來搭配所有由給定的標準,符合條件的元素,並進行更新,而無需運行相同的查詢多次或不得不處理陣列客戶端。

在單個文檔中沒有針對通用更新的服務器端解決方案嗎?我正在開發使用PHP,雖然解決方案應該是通用的。

回答

0

恐怕這是不可能的。從the documentation

記住位置$運營商充當更新查詢選擇第一場比賽的佔位符。 [不是我的重點]

這是在MongoDB Jira的SERVER-1243下跟蹤的。

jira中有相當多的相關功能請求,主要是在主題「virtual collections」下。

+0

希望至少在這一個髒解決方案。儘管如此,謝謝你的吉拉鍊接。 –