给出一组项目{url:'http:// blah'}.如何判断记录是否存在于URL为"http://stackoverflow.com"的位置?
Ps我正在与c#驱动程序通信
根据mongodb网站,如果我只是从副本集中给它一个成员,我应该能够连接到副本集:
"即使种子列表不完整,C#驱动程序也能够连接到副本集.只要种子列表中至少有一个服务器响应,它就会找到主服务器,即使它不在种子列表中也是如此(响应将包含完整副本集和当前主副本的名称." http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial#CSharpDriverTutorial-Connectionstrings
但是,如果我只是给它一个次要成员,我就无法让我的驱动程序连接.
这是我目前的连接声明:
m_server = MongoServer.Create(new MongoServerSettings { ConnectionMode = ConnectionMode.ReplicaSet, Server = new MongoServerAddress(connection) });
'connection'变量是: mongodb://servername/?safe=true
我看到了这个:https://jira.mongodb.org/browse/CSHARP-500,我确实运行了rs.status(),并且确实使用了正确的服务器名称.任何帮助表示赞赏!
我是MongoDB的新手,我刚刚成功地从MS SQL迁移到了MongoDB.当我为MongoDB集合制作我的自定义类时,我有一些额外的属性,我不需要它.
我怎么能删除它?
例如,假设我有基本课程
public class Basic {
public ObjectId _id {get;set;}
public string Name {get;set;
public string Description {get;set;
}
Run Code Online (Sandbox Code Playgroud)
然后我在Mongo存储一些项目
var collection = Mongo.GetCollection<Basic>("basic");
var item = new Basic{ Name = "TestName", Description = "Remove me"};
collection.insert(item);
Run Code Online (Sandbox Code Playgroud)
当我进行更改例如我不需要我的Basic类中的Description属性时,我想删除所有文档中的每个Description属性.
MongoDb,c#驱动程序:两个线程正在从MongoDb获取相同的单个文档,更改其状态并将其更新回数据库。我希望每个线程都可以检测其他线程在阅读和更新此文档之间是否进行了任何更改。如果此类更改是由其他线程完成的,则我不希望当前线程覆盖它们,并且希望记录此信息。请让我知道可能的解决方案。我知道有MongoCollection<T>.Update和MongoCollection<T>.FindAndModify方法,在那里我可以基于从数据库中取出信息定义查询,但我看不出有什么方法来检测,如果该文件实际上是发现和更新与否,有喜欢的更新返回的记录数的任何信息。
我对这个疯狂了......
我有这个聚合框架表达式像mongo shell中的魅力一样工作:
{ $group :
{
_id : '$Code' ,
'Special' : { $sum : { $cond: [{ $eq: [ '$Special', 'Success']},1,0]}}
}
}
Run Code Online (Sandbox Code Playgroud)
我需要在c#中做到这一点,我尝试了很多组合但没有成功.
有谁有任何线索?
谢谢
有没有办法将值与mongodb集合中文档中的每个数组和子文档进行匹配,并返回文档
{
"_id" : "2000001956",
"trimline1" : "abc",
"trimline2" : "xyz",
"subtitle" : "www",
"image" : {
"large" : 0,
"small" : 0,
"tiled" : 0,
"cropped" : false
},
"Kytrr" : {
"count" : 0,
"assigned" : 0
}
Run Code Online (Sandbox Code Playgroud)
}
例如,如果在上述文件中我正在搜索xyz或"ab"或"xy"或"z"或"0",则应返回此文件.
我实际上必须使用C#驱动程序在后端实现这一点,但mongo查询也会有很大帮助.
请指教.
谢谢
在旧的API(1.X)中,您可以通过使用从以下位置返回State的MongoServer实例上的属性来判断服务器是否已连接MongoClient.GetServer:
public bool IsConnceted
{
get
{
return _client.GetServer().State == MongoServerState.Connected;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,GetServer它不是新API(2.0)的一部分.怎么能实现呢?
我有一个基类Entity,它有一个字符串Id成员和一个派生类A.
但是,在创建派生类的新实例并使用InsertOneAsync将其添加到我的集合时,文档将添加到数据库中,并将null作为Id值.
使用ObjectId作为Id似乎确实有效,但我试图阻止我的模型中的MongoDB依赖.
我还尝试了以下代码,但结果是一样的:
BsonClassMap.RegisterClassMap<Entity>(cm =>
{
cm.MapIdField(x => x.Id).SetSerializer(new StringSerializer(BsonType.ObjectId));
});
Run Code Online (Sandbox Code Playgroud) 我尝试执行此查询:
MongoCollection<AnalyticsClicks> dbCollection = DetermineCollectionName<AnalyticsClicks>();
var query = from c in dbCollection.AsQueryable()
where c.UserId == userId && c.CampaignId == campaignId
select new
{
c.Email,
c.Link
};
var res = query.GroupBy(x => x.Email, b => b.Link).Count();
Run Code Online (Sandbox Code Playgroud)
但我有例外:
不支持GroupBy查询运算符.
我在robomongo写了一个等价的请求
db.analyticsClicks.aggregate(
{ $match: { UserId: 4790, CampaignId: 92093}},
{ $group : {
"_id" : {
"Email" : "$Email",
"Link" : "$Link",
}
}
})
Run Code Online (Sandbox Code Playgroud)
它有效,但我还需要获取当前集合中的项目数.如何使用C#mongo驱动程序重写此查询?
我有以下代码实现MongoDb 2.0 c# driver.但我需要访问将插入的MailLists集合Profile.我p在构造函数中编写了预期的解决方案,但是如何通过多个操作实现它?
IMongoCollection<Profile> dbCollection = DetermineCollectionName<Profile>();
var filter = Builders<Profile>.Filter.In(x => x.ID, profiles.Select(x => x.ID));
var updateMl = Builders<Profile>.Update.AddToSet(p => p.MailLists, new Profile2MailList
{
MailListId = maillistId,
Status = p.MailLists.MergeMailListStatuses(),
SubscriptionDate = DateTime.UtcNow
});
dbCollection.UpdateManyAsync(filter, updateMl, new UpdateOptions { IsUpsert = true });
Run Code Online (Sandbox Code Playgroud)