У меня есть довольно большой документ MongoDB, который содержит все виды данных. Мне нужно идентифицировать поля типа массива в коллекции, чтобы я мог удалить их из отображаемых полей в сетке, которую я буду заполнять.
Мой метод теперь состоит из получения всех имен полей в коллекции с помощью
Это было взято из ответа, опубликованного здесь MongoDB Получить имена всех ключи в коллекции
mr = db.runCommand({
"mapreduce" : "Product",
"map" : function() {
for (var key in this) { emit(key, null); }
},
"reduce" : function(key, stuff) { return null; },
"out": "things" + "_keys"
})
db[mr.result].distinct("_id")
И запустить для каждого из полей запрос, подобный этому
db.Product.find( { $where : "Array.isArray(this.Orders)" } ).count()
Если есть что-то полученное, поле считается массивом.
Мне не нравится, что мне нужно запускать n+2 запросов (n — количество различных полей в моей коллекции), и я не хотел бы жестко кодировать поля в модели. Это разрушило бы всю цель использования MongoDB.
Есть ли лучший способ сделать это?