首页 文章

在C#中使用Dot符号访问MongoDB查询结果(BsonDocuments)

提问于
浏览
2

如何在C#中访问MongoCursor属性 .

我有以下代码行:

MongoCursor results = collection.Find(searchQuery).SetLimit(10).SetFields(
Fields.Include("name1","name", "_id"));

MongoDB返回一个数组,每个数组都有两个属性:name和name1 . 在调试器的结果视图中,我可以看到一个数组,数组中的每个项都包含一个 MongoDB.Bson.BsonDocument .

我想要一个点表示法访问数组中每个BsonDocument的属性 . 我怎样才能做到这一点 .

2 回答

  • 5

    要从 BsonDocument 中获取值,您可以使用 GetValue / TryGetValue 方法或索引器:

    foreach (var document in results)
    {
        var name1 = document.GetValue("name1");
        var name = document["name"];
    }
    
  • 2

    当我不得不使用原始BsonDocuments时,遇到了这个问题 . 此解决方案允许您使用点表示法 .

    没有经过全面测试或其他任何东西,但可能有用 .

    void Main()
    {
        var example = new BsonDocument{
            { "customer", new BsonDocument { { "email" , "homerjay@simpsons.com" } }}
        };
    
        var email = example.GetPath("customer.email").AsString;
    
        Console.WriteLine(email);
    }
    
    public static class MongoDbHelper
    {
        public static BsonValue GetPath(this BsonValue bson, string path)
        {
            if (bson.BsonType != BsonType.Document)
            {
                throw new Exception("Not a doc");
            }
    
            var doc = bson.AsBsonDocument;
    
            var tokens = path.Split(".".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
    
            if (tokens.Length == 0 )
            {
                return doc;
            }
    
            if (!doc.Contains(tokens[0]))
            {
                return BsonNull.Value;
            }
    
            if (tokens.Length > 1)
            {
                return GetPath(doc[tokens[0]], tokens[1]);
            } 
    
            return doc[tokens[0]];
        }
    }
    

相关问题