2011-12-22 85 views
2

拉所有元件假設我有以下模式:mongodb的從陣列

"_id" : 1, 
    "n" : [{ 
     "a" : ObjectId("4ef0ca414653b7c866040000"), 
     "d" : new Date("Thu, 22 Dec 2011 04:53:56 GMT +04:00") 
    }, { 
     "a" : ObjectId("4ef0ca414653b9c866040000"), 
     "d" : new Date("Thu, 22 Dec 2011 04:54:11 GMT +04:00") 
    }, { 
     "a" : ObjectId("4ef0ca424653b9c866040000"), 
     "d" : new Date("Thu, 22 Dec 2011 04:54:30 GMT +04:00"), 
    }] 

和我需要刪除所有n,其中d小於特定的日期。

所以我想我可以做到這一點通過以下方式:

db.coll.update({ 
'_id': 1 
},{ 
$pullAll : { 
    n.d : { 
    $lte : new Date(2000, 10, 11) 
    } 
} 
}) 

但問題是,它不是以這種方式工作。 有什麼建議嗎?

回答

7

這不是$ pullAll的工作方式。您無法指定匹配條件,只能指定要刪除的對象數組(需要完全匹配)。

幸運的是,你可以使用$來代替拉(這的確接受一個匹配條件):

db.coll.update({ 
'_id': 1 
},{ 
$pull : { 
    n.d : { 
    $lte : new Date(2000, 10, 11) 
    } 
} 
}) 

注意,$拉也拉相匹配的所有元素,不只是一個。

這是admittedly a little confusing