using System.Collections.Generic;
public static void Main()
""idTipo"" : NumberInt(34)
""idTipo"" : NumberInt(34)
BsonDocument bson = BsonDocument.Parse(input);
Console.WriteLine(String.Join(",", GetRootDocumentAllKeys(bson)));
private static List<string> GetRootDocumentAllKeys(BsonDocument bson)
List<string> collectionKeys = new List<string>();
collectionKeys.AddRange(GetDocumentKeys(bson));
return collectionKeys.Distinct()
private static List<string> GetDocumentKeys(BsonValue value)
List<string> keys = new List<string>();
if (value.GetType() != typeof(BsonDocument))
foreach (var kvp in (BsonDocument)value)
keys.AddRange(GetArrayKeys(kvp.Value));
keys.AddRange(GetDocumentKeys(kvp.Value));
private static List<string> GetArrayKeys(BsonValue value)
List<string> keys = new List<string>();
if (value.GetType() != typeof(BsonArray))
foreach (var item in (BsonArray)value)
keys.AddRange(GetArrayKeys(item));
keys.AddRange(GetDocumentKeys(item));