Будет полезен следующий запрос:
db.collection.aggregate([
{
$group: {
_id: null,
docs: {
$push: "$$ROOT"
}
}
},
{
$project: {
docs: {
$map: {
input: "$docs",
as: "d",
in: {
$objectToArray: "$$d"
}
}
}
}
},
{
$unwind: "$docs"
},
{
$match: {
"docs.v.title": {
$exists: true
}
}
},
{
$replaceRoot: {
newRoot: {
$arrayToObject: "$docs"
}
}
}
])
MongoPlayGroundLink
Мое предложение: не оставлять разные поля. Вы должны сохранить одни и те же поля во всех документах и добавить дополнительную информацию в качестве подполей (а не в название поля). Как показано ниже:
{ 'name': 'John Doe',
'atributes' : {
'alive' : {'start':15816412115, 'end':1516186131 },
'job' : 'developer',
'title' : 'senior',
}
},
{ 'name': 'John Cena',
'atributes' : {
'alive' : {'start':15816412115, 'end':1516186131 },
'job' : 'dancer',
'year' : 2017
}
}
В противном случае запрос будет затруднен.