Ano, nyní můžete použít agregační operátor $objectToArray
(SERVER-23310
) pro přeměnu klíčů na hodnoty. Měl by být schopen spočítat „dynamický“ počet polí. Kombinace tohoto operátoru s $addFields
může být docela užitečné.
Oba operátoři jsou k dispozici v MongoDB v3.4.4+. Jako příklad použijte vaše dokumenty výše:
db.sports.aggregate([
{ $addFields :
{ "numFields" :
{ $size:
{ $objectToArray:"$$ROOT"}
}
}
},
{ $match:
{ numFields:
{$gt:2}
}
}
])
Výše uvedený agregační kanál nejprve přidá pole s názvem numFields
. Hodnota by byla velikost pole. Pole bude obsahovat počet polí v dokumentu. Druhá fáze by filtrovala pouze 2 pole a více (dvě pole, protože stále existuje _id
pole plus name
).
V PyMongo , výše uvedený agregační kanál bude vypadat takto:
cursor = collection.aggregate([
{"$addFields":{"numFields":
{"$size":{"$objectToArray":"$$ROOT"}}}},
{"$match":{"numFields":{"$gt":2}}}
])
Po výše uvedeném, pokud je to možné pro váš případ použití, bych navrhl přehodnotit vaše datové modely pro snadnější přístup. tj. Přidejte nové pole pro sledování počtu sportů při vložení/přidání nové sportovní pozice.