Обновление: продолжение MongoDB Получить имена всех ключей в коллекции.
Как указано Kristina, можно использовать карту/сокращение 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 + different, мы получим:
[ "_id", "egg", "foo", "hello", "type" ]
Но мы не получим бар и ключи baaar, которые вложены в структуру данных. Возникает вопрос: как получить все ключи, независимо от их уровня глубины? В идеале мне бы хотелось, чтобы script дошел до всех уровней глубины, создавая такой вывод, как:
["_id","egg","foo","foo.bar","foo.bar.baaar","hello","type"]
Заранее благодарю вас!