1. Array is easy to use if the elements are flat, e.g.,

{
"alternative_of_names": [
"Jane Doe",
"John Doe",
"Tim Doe"
]
}


When updating with new values, we could simply use $addToSet. 2. Array of json objects becomes really hard to update. { "alternative_of_names": [ { "source": "Magzine", "first": "Jane", "last": "Doe" }, { "source": "TV", "first": "John", "last": "Doe" }, { "source": "Ads", "first": "Tim", "last": "Doe" } ] }  Suppose we would like to update the name from source “Ads”, it becomes tedious. 3. For the above purpose, we could simply rewrite the database in the following way. { "alternative_of_names": { "Magzine": { "first": "Jane", "last": "Doe" }, "TV": { "first": "John", "last": "Doe" }, "Ads": { "first": "Tim", "last": "Doe" } } }  Then we can update easily with $set.