[英]MongoDB - Pull from array of objects
我有一個收藏
{
"_id" : ObjectId("534bae30bf5049a522e502fe"),
"data" : [
{
"0" : {
"content" : "1",
"type" : "text",
"ident" : true
},
"1" : {
"content" : "",
"type" : "text",
"ident" : false
}
},
{
"0" : {
"content" : "2",
"type" : "text",
"ident" : true
},
"1" : {
"content" : "",
"type" : "text"
}
}
]
}
content
是獨一無二的。
我將如何刪除與content: '2'
匹配的對象?
我已經試過了:
data:{$pull:{"content": deletions[i]}}
其中deletions [i]
是內容。
和幾種變體,但我無法使其正常工作。 我想念什么?
根據您的評論,您應該擔心。 我已經多次見過這種情況,特別是在PHP應用程序中(PHP在轉儲數組中有這種有趣的表示法)。
問題是諸如“ 0”和“ 1”之類的元素本身會創建子文檔,而不是僅將該結構下的所有內容保留為子文檔本身作為數組成員,然后您就會遇到問題訪問數組的單個成員,因為使用的路徑需要是“絕對的”。
因此,這實際上不會“迫使”其他等效的“點表示法”形式來訪問元素。 除了在這種情況下,它不僅是數組的“第n個”元素,而且是您需要解決的實際路徑。
但是,如果這確實對您有用,並且似乎“某人”正試圖避免“嵌套”數組下的位置更新出現問題(有關詳細信息,請參見位置$
運算符文檔),那么可以按以下方式執行更新:
基本聲明如下:
db.collection.update(
{
"data.0.context": 2
},
{
"$pull": { "data.$.0.context": 2 }
}
)
這樣做確實看起來有點“有趣”,但是在研究實際結構時,您應該能夠知道為什么需要這樣做。 從本質上講,這符合使用位置$
運算符指示數組中第一個匹配元素的索引(也稱為“數據”)的要求,然后使用標准子文檔表示法來指定要更新的元素的路徑的要求。
因此,如果元素實際上處於未知位置,這當然會帶來問題。 但是要考慮的是,鑒於記錄的限制,數組的哪種用法實際上對您來說很重要? 如果您需要匹配“內部”元素的位置,請更改結構以將數組放在其中。
但是,請務必了解限制的影響,並嘗試根據引擎的實際功能進行建模。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.