Ya, Anda sekarang dapat menggunakan operator agregasi $objectToArray
(SERVER-23310
) untuk mengubah kunci menjadi nilai. Itu harus dapat menghitung jumlah bidang 'dinamis'. Menggabungkan operator ini dengan $addFields
bisa sangat berguna.
Kedua operator tersedia di MongoDB v3.4.4+Menggunakan dokumen Anda di atas sebagai contoh:
db.sports.aggregate([
{ $addFields :
{ "numFields" :
{ $size:
{ $objectToArray:"$$ROOT"}
}
}
},
{ $match:
{ numFields:
{$gt:2}
}
}
])
Pipa agregasi di atas, pertama-tama akan menambahkan bidang yang disebut numFields
. Nilainya akan menjadi ukuran array. Array akan berisi jumlah bidang dalam dokumen. Tahap kedua akan menyaring hanya untuk 2 bidang dan lebih besar (dua bidang karena masih ada _id
bidang ditambah name
).
Di PyMongo , pipa agregasi di atas akan terlihat seperti:
cursor = collection.aggregate([
{"$addFields":{"numFields":
{"$size":{"$objectToArray":"$$ROOT"}}}},
{"$match":{"numFields":{"$gt":2}}}
])
Setelah mengatakan hal di atas, jika memungkinkan untuk kasus penggunaan Anda, saya sarankan untuk mempertimbangkan kembali model data Anda untuk akses yang lebih mudah. yaitu Tambahkan bidang baru untuk melacak jumlah olahraga saat posisi olahraga baru dimasukkan/ditambahkan.