2015-09-03 101 views
0

我有一個文件如下:pymongo嵌套嵌入文檔字段更新

{ 
    "name": "restaurant 1", 
    "rooms": 
     [ 
      {"name": "room1", 
       "desks": [ 
        { 
         "name": "desk1", 
         "unique": "abcde", 
         "busy": False 
        }, 
        { 
         "name": "desk2", 
         "unique": "abcdf", 
         "busy": True 
        } 
       ]}, 
      {"name": "room2", 
       "desks": [ 
        { 
         "name": "desk1", 
         "unique": "bbcde", 
         "busy": False 
        }, 
        { 
         "name": "desk2", 
         "unique": "bbcdf", 
         "busy": False 
        } 
       ]} 
     ] 
} 

我pymongo搜索查詢:

db.restaurants.update(
    {'rooms.desks.unique': 'bbcdf')}, 
    {'$set': {'rooms.$.desks.$$.busy': True}} 
) 

我無法更新「忙」的辦公桌領域。 $$部分不起作用。我應該用什麼來替換「$$」?

如何找到辦公桌的索引。

預先感謝

回答

1

根據documentation它不可能:

的位置$操作者可以不被用於橫穿多個陣列的查詢,諸如遍歷嵌套在其它陣列內的數組查詢,因爲替換$ placeholder是一個單一的值。

您很可能需要重新設計您的數據庫模式。

+0

那麼,改變它的唯一機會是for循環?無需重新設計db –

+0

是的,唯一的機會是循環並使用具體索引運行查詢。請注意,這個更新不是原子的。根據您的應用程序列表可能會在另一個進程中同時更改,因此您將更新錯誤的數組項目... –