Rimuovi il documento incorporato in una matrice di documenti nidificati

Il mio schema assomiglia a questo:

"content" : [ { "_id" : ObjectId("4fc63de85b20fb72290000f8"), "assets" : [ { "path" : "temp/4f840af9565832fa14000002/4f840b1e565832fa14000007/4fc63de85b20fb72290000f7/content/I_Understanding_and_Measuring.pdf", "_id" : ObjectId("4fc63def5b20fb722900010e") }, { "path" : "temp/4f840af9565832fa14000002/4f840b1e565832fa14000007/4fc63de85b20fb72290000f7/content/me.jpg", "_id" : ObjectId("4fc63e4d5b20fb722900015d") } ], "content" : "", "name" : "Downloads" }, { "_id" : ObjectId("4fc63dfd5b20fb722900012a"), "assets" : [ { "path" : "temp/4f840af9565832fa14000002/4f840b1e565832fa14000007/4fc63de85b20fb72290000f7/content/me.jpg", "_id" : ObjectId("4fc63e055b20fb7229000147") }, { "path" : "temp/4f840af9565832fa14000002/4f840b1e565832fa14000007/4fc63de85b20fb72290000f7/content/thierry-henry-12-31-11-1.jpg", "_id" : ObjectId("4fc63e525b20fb7229000164") } ], "content" : "", "name" : "Bio" } ], 

Posso recuperare questo documento con:

 db.presentations.find({'content.assets._id': ObjectId('4fc63def5b20fb722900010e')})` 

Ho provato quanto segue per rimuovere un documento dall’asset collection con la riga sottostante, ma senza alcun risultato:

 db.presentations.update( {'content.assets._id': ObjectId('4fc63def5b20fb722900010e')}, {$pull: {'content.assets': {'_id': ObjectId('4fc63def5b20fb722900010e')}}} ) 

Sto cercando di rimuovere un object dalla collezione di assets corrispondente dal suo id. Qualche idea?

Sei così vicino! Ricorda che il tuo “contenuto” più esterno è una matrice stessa. Quindi il seguente cambiamento di 2 caratteri funziona, usa contenuto. $. Risorse all’interno del valore per $ pull.

 db.presentations.update( {'content.assets._id': ObjectId('4fc63def5b20fb722900010e')}, {$pull: {'content.$.assets': {'_id': ObjectId('4fc63def5b20fb722900010e')}}} ) 

Fai uno zoom avanti.