C# MongoDB 映射 class
C# MongoDB mapping class
你好,我真的在努力使用 classes 和映射 MongoDB 文档,我承认我在努力理解整个 OOP 的东西,到目前为止我的编码仅限于目前只是功能编码。我的文档有很多字段,但我暂时只对其中的几个感兴趣。我在 Python 中编写了我的程序,没有 classes 但我想在 C# 中重新创建它。
我的 Python 代码 return 这两个字段。
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,
我正在努力处理的 C# 代码
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 文档,但是当我尝试使用 class 时,我无法将其映射到 variable/object,尝试上面的代码会出现以下错误。
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
将文档过滤器更改为 Bson 可以正常工作,但尝试将其 return 作为 class 对象却给我这个错误。
Severity Code Description Project File Line Suppression State
Error CS0029 Cannot implicitly convert type 'MongoDB.Bson.BsonDocument' to 'Program.StockItem' Storesincsharp C:\Users\zaks\source\repos\Storesincsharp\Storesincsharp\Program.cs 48 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;
}
你好,我真的在努力使用 classes 和映射 MongoDB 文档,我承认我在努力理解整个 OOP 的东西,到目前为止我的编码仅限于目前只是功能编码。我的文档有很多字段,但我暂时只对其中的几个感兴趣。我在 Python 中编写了我的程序,没有 classes 但我想在 C# 中重新创建它。
我的 Python 代码 return 这两个字段。
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,
我正在努力处理的 C# 代码
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 文档,但是当我尝试使用 class 时,我无法将其映射到 variable/object,尝试上面的代码会出现以下错误。
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
将文档过滤器更改为 Bson 可以正常工作,但尝试将其 return 作为 class 对象却给我这个错误。
Severity Code Description Project File Line Suppression State
Error CS0029 Cannot implicitly convert type 'MongoDB.Bson.BsonDocument' to 'Program.StockItem' Storesincsharp C:\Users\zaks\source\repos\Storesincsharp\Storesincsharp\Program.cs 48 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;
}