GridFS C#驱动程序的最佳实现是什么?你有什么经历?
更新:
当我说"最好"时 - 我的意思是稳定性.
谢谢!!!
考虑此类:
public class Location
{
public Coordinates Geo { get; set; }
public Location()
{
Geo = new Coordinates();
}
public class Coordinates
{
public decimal Lat { get; set; }
public decimal Long { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
我的收藏集上有一个地理空间索引,例如{ Geo: "2d" }。不幸的是,驱动程序尝试将纬度/经度坐标存储为字符串而不是数字,并且我收到一条错误消息,提示星期二3月15日16:29:22 [conn8] insert database.locations异常13026地理值必须为数字:{纬度: “ 50.0853779”,长:“ 19.931276700000012”} 1ms。为了减轻这个问题,我设置了这样的地图:
BsonClassMap.RegisterClassMap<Location.Coordinates>(cm =>
{
cm.AutoMap();
cm.MapProperty(c => c.Lat).SetRepresentation(BsonType.Double);
cm.MapProperty(c => c.Long).SetRepresentation(BsonType.Double);
});
Run Code Online (Sandbox Code Playgroud)
请注意,没有BsonType.Decimal也没有类似的东西。结果,当尝试调用时,Save()我得到了一个MongoDB.Bson.TruncationException,这似乎是合乎逻辑的。我有什么选择?
我们如何使用C#和mongoDB重命名嵌入字段?文档Person的一个例子是:
{
Id: 1,
LastName: "Smith",
FirstName: "John",
Orders: {
Id: 1,
Name: "Trousers" // I want to rename **Name** into **Something**
}
}
Run Code Online (Sandbox Code Playgroud)
使用mongoDB语法,它会是这样的
db.Users.update({}, {$rename:{"Orders.Name":"Orders.Something"}},true, true)
Run Code Online (Sandbox Code Playgroud)
谢谢.
我们的ASP.NET MVC项目同时使用MS SQL Server(对于大多数数据)和MongoDB(最不重要的东西,如审计日志,内部消息系统,通知等).所以问题是数据访问层架构在我的案例中应该是什么样的?我们使用Entity Framework POCO生成器来访问SQL Server,因为单元测试很重要,理想情况下我更喜欢扩展Entity Framework生成的IEntities接口,以便业务逻辑和UI开发人员甚至不知道实际对象的存储位置:
[GeneratedCode("Entity","0.9")]
public partial interface IEntities
{
IObjectSet<Administrator> Administrators { get; }
IObjectSet<User> Users { get; }
IObjectSet<Banner> Banners { get; }
IObjectSet<AuditLog> AuditLogs { get; }
...
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,只有AuditLog实体存储在MongoDB中,而其余实体通过SQL Server工作.
到目前为止,我所拥有的最佳解决方案是在MongoDB C#驱动程序之上实现一个IObjectSet <T>接口,MongoRepository(http://mongorepository.codeplex.com/)项目是我的问题的一半解决方案.有谁知道更好的方法?
是否可以直接将图像存储到mongo GridFS中,这是我从API获得的?或者我必须在本地存储然后将其插入mongo?
我试图直接从URL插入,但C#驱动程序给了我一个错误,不支持URI ..
我正在使用Mongodb官方驱动程序,我想默认设置元素的命名为小写,以避免这样的代码:
public class Localization
{
[BsonId(IdGenerator = typeof(ObjectIdGenerator))]
public int Id { get; set; }
[BsonRequired]
[BsonElement("country")]
public string Country { get; set; }
Run Code Online (Sandbox Code Playgroud)
在此示例中,我希望默认情况下元素名称为"country"而不是"Country"又称小写.可能吗?
谢谢
使用MongoDB C#驱动程序,似乎我无法使用setFields通过AsQueryable获取数据,而只能通过mongo查询获取Where条件.我通过这段代码获取了文档
var query = _collection.FindAll().SetFields(fields.MongoFieldsBuilder).AsQueryable();
var query1 = query.Where(d=>d.Name="Ken").ToList();
var query2 = query.Where(d=>d.Age>=2).ToList();
Run Code Online (Sandbox Code Playgroud)
因此,当query1或query2执行时,c#driver从mongo中获取所有文档,然后在内存中过滤它.但我预计Where条件将转换为带字段的mongo查询.任何人都可以解释如何正确地做到这一点?
我试图通过ASP.NET MVC 4中内置的REST api退出MongoDB集合中的所有文档,当我输入localhost时遇到错误:50491/api/document:
反序列化类Acord_Rest_API.Models.Document的Id属性时发生错误:无法从BsonType ObjectId反序列化字符串.
我的控制器看起来像:
public class DocumentController : ApiController
{
public readonly MongoConnectionHelper<Document> docs;
public DocumentController()
{
docs = new MongoConnectionHelper<Document>();
}
public IList<Document> getAllDocs()
{
var alldocs = docs.collection.FindAll();
return alldocs.ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
我的MongoDB文档是这样的吗?

我在这里错过了什么?
我连接到DB的类:
public class MongoConnectionHelper<T> where T: class
{
public MongoCollection<T> collection { get; private set; }
public MongoConnectionHelper()
{
string connectionString = "mongodb://127.0.0.1";
var server = MongoServer.Create(connectionString);
if (server.State == MongoServerState.Disconnected)
{
server.Connect();
}
var conn = server.GetDatabase("Acord");
collection = conn.GetCollection<T>("Mappings"); …Run Code Online (Sandbox Code Playgroud) 切换到新标准UUID BinData子类型4有什么性能优势吗?我们的大部分藏品被设置为使用GuidRepresenation.CSharpLegacy这是默认为C#的驱动程序.如果我设定Mongo.Bson.BsonDefaults.GuidPresenation = Mongo.Bson.GuidRepresentation.Standard,它会有利于性能吗?还假设我们将所有现有数据转换为使用标准子类型.
如何使用MongoDB C#驱动程序执行$ lookup?我在这里的驱动程序文档中找不到它:
https://docs.mongodb.org/getting-started/csharp/query/
但是如果我在他们的JIRA中正确理解这张票,它应该在驱动程序的2.2版本中: