It's not a "subobject" but a separate node in its own right. I'd suggest reading about CVTs or mediator types. To change its properties you need to move the connect to the inner query.
Here's the yeast ingredient node from my pizza dough recipe
This query will update the quantity for the yeast (assuming there's only one ingredient node specifying yeast):
[{
"id": "/m/0wh8nkh",
"/food/recipe/ingredients": [{
"ingredient": {
"id": "/en/yeast"
},
"quantity": {
"connect": "update",
"value": 2
},
"unit": {
"id": "/en/teaspoon",
"connect": "update"
}
}]
}]
but rather than counting on ingredients being unique, I'd suggest fetching and saving the IDs of the ingredient nodes so that you can refer to them explicitly in your query.
Some other notes: - you shouldn't be creating new Dishes for every Recipe. Many dishes should already exist in Freebase and you should let the user select them separately from the recipe. - You need to add /common/topic to Dishes & Recipes that you create (but not to the CVTs for the ingredients)
It's great that you're using the sandbox so that you're not messing up the production database while you debug.