C#MongoDB映射类

问题描述

嗨,我真的很努力地使用类和映射MongoDB文档,我承认我正在努力了解整个OOP,目前为止我的编码仅限于函数式编码。我的文档有很多字段,但是我暂时只对其中几个感兴趣。我用Python编写了没有类的程序,但我想用C#重新创建它。

我的Python代码返回两个字段。

cc_toolchain_config

我正在苦苦挣扎的C#代码

 stock_details = collection.find_one({'Stock Number' : stock_number})
        #print(stock_details.keys()) 
        val1 = stock_details['Stock Number']
        val2 = stock_details['Qty In Stock']

        return val1,val2,

我可以成功获取Bson文档,但是当我尝试使用类时,无法将其映射到变量/对象,尝试上面的代码会给我带来以下错误

 public static StockItem GetStockItem(string StockNumber)
    {
        var client = new MongoClient()
        var db = client.GetDatabase("storesdb");
        var collection = db.GetCollection<BsonDocument>("storeslist");
        var filter = Builders<StockItem>.Filter.Eq("Stock Number",StockNumber);
        var findfilter = collection.Find(filter).FirstOrDefault();
        var returnValue = findfilter;
        return returnValue;
    }


    [BsonIgnoreExtraElements]
    public class StockItem
    {
        [BsonElement("Stock Number")]
        public string stockNumber { get; set; }

        [BsonElement("Qty In Stock")]
        public int qtyInStock { get; set; }

    }

将文档过滤器更改为Bson可以正常工作,但是尝试将其作为类对象返回却给了我这个错误

Severity    Code    Description Project File    Line    Suppression State
Error   CS1503  Argument 2: cannot convert from 'MongoDB.Driver.FilterDeFinition<Program.StockItem>' to 'System.Linq.Expressions.Expression<System.Func<MongoDB.Bson.BsonDocument,bool>>'  Storesincsharp  C:\Users\zaks\source\repos\Storesincsharp\Storesincsharp\Program.cs 46  Active

有人能指出我正确的方向吗?

解决方法

您将要使用类型化的集合。另外,为避免输入错误,您还可以通过linq而不是字符串名称来指定过滤器名称。当您重构课程时,它也有帮助。示例:

    public static StockItem GetStockItem(string StockNumber)
    {
        var client = new MongoClient();
        var db = client.GetDatabase("storesdb");
        var collection = db.GetCollection<StockItem>("storeslist");  // Typed collection.
        var filter = Builders<StockItem>.Filter.Eq(x=> x.stockNumber,StockNumber); // Referenced property name.
        StockItem returnValue = collection.Find(filter).FirstOrDefault();
        return returnValue;
    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...