我试图使用C#将嵌套文档插入MongoDB.我有一个名为类别的集合.在该集合中,必须存在具有2个数组,一个命名类别和一个命名标准的文档.在这些数组中必须存在具有自己的ID的新文档,这些ID也包含上面列出的相同名称的数组.以下是我到目前为止的情况,但我不确定如何继续.如果您查看代码我想要做的是添加嵌套在categories文档中的categories数组下的"namingConventions"文档,但是namingConventions也必须具有唯一的ID.
在这一点上,我不确定我是否已经以最好的方式做到了这一点,所以我对这一切都有任何建议.
namespace ClassLibrary1
{
using MongoDB.Bson;
using MongoDB.Driver;
public class Class1
{
public void test()
{
string connectionString = "mongodb://localhost";
MongoServer server = MongoServer.Create(connectionString);
MongoDatabase standards = server.GetDatabase("Standards");
MongoCollection<BsonDocument> categories = standards.GetCollection<BsonDocument>("catagories");
BsonDocument[] batch = {
new BsonDocument { { "categories", new BsonArray {} },
{ "standards", new BsonArray { } } },
new BsonDocument { { "catagories", new BsonArray { } },
{ "standards", new BsonArray { } } },
};
categories.InsertBatch(batch);
((BsonArray)batch[0]["categories"]).Add(batch[1]);
categories.Save(batch[0]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
为清楚起见,这就是我需要的: …
给出一个;
Expression<Func<T, bool>> criteria;
Run Code Online (Sandbox Code Playgroud)
是否有可能将其转换为IMongoQuery 与驱动程序?
看起来它可能在某个地方的QueryBuilder中,但我看不到它.
我有多个MongoDB服务器用于开发,登台和生产,我想从Dev-> Staging and Staging-> Live自动化一些部署过程.手动复制集合意味着使用相当神奇的MongoVUE工具(http://www.mongovue.com/),但显然这不是自动化的理想解决方案!
所以在C#Driver中,有没有办法在同一台服务器上复制一个集合?有没有办法将整个集合(索引完整)复制到另一台服务器?
我已经尝试循环收集集合,从服务器A检索文档然后将它们插入服务器B.这种方法感觉笨拙,冗长且容易出错.有没有更好的办法?
谢谢!
MongoDB驱动程序的文档似乎与从NuGet中提取的实际驱动程序不同.
更具体地说,记录的"MongoCredentials"(复数)不存在,但只有"MongoCredential"(单数).此外,MongoServer.GetDatabase似乎没有接受MongoCredential的构造函数,只有MongoDatabaseSettings(以及命名数据库的字符串),并且我没有看到明显的方式为MongoDatabaseSettings对象提供MongoCredential对象.
我没有在Google上找到我在驱动程序中找到的对象的任何示例,只有那些与(过时的?)官方文档一致的对象.
我正在使用的驱动程序(在NuGet包管理器中)被称为"官方MongoDB C#驱动程序".
总结一下:如何在C#驱动程序中实际提供凭据?
我使用的是MongoDb 2.4.9版本.当我尝试将字符串列表转换为Bson数组时,我最终会出现以下错误:
BsonArray bArray = new BsonArray();
foreach (var term in termMonitorIds)
{
bArray.Add(term.ToBson());
}
Run Code Online (Sandbox Code Playgroud)
'/'应用程序中的服务器错误.
String值无法写入BSON文档的根级别.
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.InvalidOperationException:无法将String值写入BSON文档的根级别.
编辑
当我在下面的LINQ查询中使用它时:
entities =
(from e in this.collection.AsQueryable<SocialRecord>()
where sources.Contains(e.SocialType) && (e.DateCreated >= fr) && (e.DateCreated <= to) && e.TermMonitorIds.Any(X=> bArray.Contains(X)) && e.IsExactMatch == isInstagramExactMatch
select e)
.Take(5000)
.ToList();
Run Code Online (Sandbox Code Playgroud)
结果值不能为空.参数名称:名称.仅当我将bArray添加到查询时才会出现此错误消息.
使用2.0驱动程序,以下代码有时会挂起并永远不会返回.
public async Task<T> GetFirst(FilterDefinition<T> query)
{
return await GetCollection.Find(query).FirstOrDefaultAsync();
}
Run Code Online (Sandbox Code Playgroud)
如果我首次亮相并在回程线上设置一个断点,一切都会恢复正常.在shell中运行的查询是这样的:
db.Customers.find({"Name" : /test$/i})
Run Code Online (Sandbox Code Playgroud) 我正在从mongodb csharp驱动程序1.10.0迁移到2.0.0.我使用的其中一个集合非常大,必须使用不同的过滤器属性来完成许多查询.这就是我依赖一些索引提示语句的原因.使用v1.10驱动程序看起来像
myCollection.Find(query).SetHint("myIndexName");
Run Code Online (Sandbox Code Playgroud)
我搜索了v2驱动程序api但是这个提示方法似乎在v2驱动程序中完全删除了.还有其他选择吗?我该如何使用v2驱动程序进行索引提示?
我isDeleted Nullable在Profile课堂上有财产.
Builders<Profile>.Filter.Eq(p => p.IsDeleted, BsonNull.Value)
Run Code Online (Sandbox Code Playgroud)
但是下面的代码引发了下一个编译错误:
Error 11 Cannot convert lambda expression to type
'MongoDB.Driver.FieldDefinition<MongoDB.DataTypes.Profile,MongoDB.Bson.BsonNull>'
because it is not a delegate type
Run Code Online (Sandbox Code Playgroud)
如何实现空检查?
以下是有关我的开发环境的信息:
Microsoft Visual Studio社区2015
.NET Framework 4.6
ASP.NET MVC程序集System.Web.Mvc Version = 5.2.3.0
MongoDB.Driver 2.0.1.27
Mongodb 3.0.6
在我的C#应用程序中,我有以下代码来检索MongoDB数据库引用:
public class MongoDBConnectionManager
{
public IMongoDatabase getMongoDB() {
var client = new MongoClient("mongodb://localhost:27017");
IMongoDatabase iMgDb = client.GetDatabase("foo");
IMongoCollection<BsonDocument> UserDetails =
iMgDb.GetCollection<BsonDocument>("Users");
return iMgDb;
} // end of public IMongoDatabase getMongoDB()
} // end of public class MongoDBConnectionManager
Run Code Online (Sandbox Code Playgroud)
以下是代表用户业务实体的POCO类:
using MongoDB.Bson.Serialization.Attributes;
public class UserModel
{
public object _id { get; set; } //MongoDb uses this field as identity.
[BsonId]
public int ID { get; …Run Code Online (Sandbox Code Playgroud) 我正在使用ASP.NET Core 2.0构建一个网站(仅在一个月前从1.1升级).MongoDB也由AWS上的Mongo Atlas托管.这个MongoDB实例有3个副本集,需要SSL才能连接,并且已设置可以从任何IP访问.
它在我的机器(Windows 10 x64)和AWS(Windows Server 2016)上运行良好.
我尝试在Linux机器上部署它,我使用apt dotnet-runtime-2.0.0在Ubuntu Server 16.04上安装,然后我尝试运行我的网站,并得到以下错误(出于安全原因,我隐藏了确切的服务器域名)
System.TimeoutException: A timeout occured after 30000ms selecting a server using CompositeServerSelector{ Selectors = WritableServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } }. Client view of cluster state is { ClusterId : "1", ConnectionMode : "ReplicaSet", Type : "ReplicaSet", State : "Disconnected", Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/*****-shard-00-00-*****.mongodb.net:27017" }", EndPoint: "Unspecified/*****-shard-00-00-*****.mongodb.net:27017", State: "Disconnected", Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection …Run Code Online (Sandbox Code Playgroud) mongodb ×10
c# ×6
.net ×4
.net-core ×1
annotations ×1
asp.net-core ×1
async-await ×1
bson ×1
linq ×1