Votre exemple fonctionne très bien :
db.so.drop();
db.so.insert(
{
"_id" : ObjectId("51ee899ec15d5aaff39d3353"),
"first" : "first",
"last" : "last",
"email" : "email",
"phone" : "555 555 5555",
"userRole" : "su",
"cards" : [
{
"rfid_id" : ObjectId("51ee899ec15d5aaff39d3359")
}
],
"zones" : [
{
"zone_id" : ObjectId("51ee899ec15d5aaff39d3357")
}
]
});
db.so.update({}, {$pull:{ "cards": {"rfid_id": ObjectId("51ee899ec15d5aaff39d3359")}}}, false, false)
db.so.find().pretty();
Sorties :
{
"_id" : ObjectId("51ee899ec15d5aaff39d3353"),
"cards" : [ ],
"email" : "email",
"first" : "first",
"last" : "last",
"phone" : "555 555 5555",
"userRole" : "su",
"zones" : [
{
"zone_id" : ObjectId("51ee899ec15d5aaff39d3357")
}
]
}
Bien que j'ai dû modifier légèrement l'ObjectID pour l'extraction, car il utilisait à l'origine une chaîne différente entre vos versions simple et complète du document.