Обновление: продолжение MongoDB Получить имена всех ключей в коллекции.
Как указала Кристина, можно использовать карту/уменьшение Mongodb для перечисления ключей в коллекции:
db.things.insert( { type : ['dog', 'cat'] } );
db.things.insert( { egg : ['cat'] } );
db.things.insert( { type : [] });
db.things.insert( { hello : [] } );
mr = db.runCommand({"mapreduce" : "things",
"map" : function() {
for (var key in this) { emit(key, null); }
},
"reduce" : function(key, stuff) {
return null;
}})
db[mr.result].distinct("_id")
//output: [ "_id", "egg", "hello", "type" ]
Пока мы хотим получить только ключи, расположенные на первом уровне глубины, это работает нормально. Однако получить те ключи, которые расположены на более глубоких уровнях, не удастся. Если мы добавим новую запись:
db.things.insert({foo: {bar: {baaar: true}}})
И снова запустим сниппет map-reduce +distinct выше, получим:
[ "_id", "egg", "foo", "hello", "type" ]
Но мы не получим ключи bar и baaar, которые вложены в структуру данных. Вопрос в том, как мне получить все ключи, независимо от их уровня глубины? В идеале я бы хотел, чтобы скрипт спускался на все уровни глубины, производя вывод, например:
["_id","egg","foo","foo.bar","foo.bar.baaar","hello","type"]
Заранее спасибо!