我们开始在工作中使用 MongoDB。到目前为止一切顺利,但我被要求评估 MongoDB 是否可以同时进行副本集和分片。经过一段时间的搜索后,我发现是的,可以,但除非确实必要,否则应该避免分片。
我在某处读到,对于 MongoDB,你确实需要有大量文档(例如数十亿)才能开始考虑分片,但是我无法理解这一点,因为这些“统计数据”中没有提到平均文档的组织和大小。
我们现在的标准是 RAM 应该大于完成请求所需的内存负载。
这让我想到了这些问题:MongoDB 和 SQL 服务器有哪些指令可以了解请求的 RAM 使用情况?
将 Sharding 与 MongoDB 结合使用的关键要求是什么?
当有人解释为什么他们将 Sharding 与 MongoDB 结合使用时,有人可以向我指出一篇文章、帖子或任何其他内容吗?
MongoDB 如何处理自动分片?
谢谢。
我计划安装 mongodb 和连接到同一台机器的 Windows 服务。该机器将处于隔离网络中。
当我们这样做的时候。无密码连接本地mongodb可以吗?
我规划的房产是这样的...
private MongoDatabase _db;
public MongoDatabase DB
{
get
{
if (_db == null)
{
var mongoServer = MongoServer.Create();
_db = mongoServer.GetDatabase("myStatistics");
}
return _db;
}
}
private MongoCollection _collection;
public MongoCollection Collection
{
get { return _collection ?? (_collection = DB.GetCollection("myStats")); }
}
Run Code Online (Sandbox Code Playgroud) 我的数据如下所示
> db.people.findOne({"Name":"Jones"})
{
"_id" : ObjectId("551dcbdc360fbd77107f8a37"),
"Name" : "Jones",
"Age" : 30,
"Profession" : "Hacker"
}
Run Code Online (Sandbox Code Playgroud)
类定义为
class Person
{
public ObjectId Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public List<string> Colors { get; set; }
public List<Pet> Pets { get; set; }
}
class Pet
{
public string Name { get; set; }
public string Type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我尝试将 Pet 元素推入 Pets 字段 …
在旧的 .Net API 版本中:
MongoClient client = new MongoClient();
var server = client.GetServer();
var db = server.GetDatabase("foo");
var collection = db.GetCollection<BsonDocument>("bar");
var document = new BsonDocument { { "_id", 1 }, { "x", 2 } };
collection.Save(document);
Run Code Online (Sandbox Code Playgroud)
有效。
当我使用新的 .Net 驱动程序 2.0 时:
var client = new MongoClient("mongodb://localhost:27017");
var database = client.GetDatabase("foo");
var collection = database.GetCollection<BsonDocument>("bar");
var document = new BsonDocument { { "_id", 1 }, { "x", 2 } };
await collection.InsertOneAsync(document);
Run Code Online (Sandbox Code Playgroud)
错误:“await”运算符只能在异步方法中使用。考虑使用“async”修饰符标记此方法并将其返回类型更改为“Task”。
参考文献:
我想问如何使用.Net …
我正在使用 .Net - mongodb c# monngodb 驱动程序。插入文档时,我想将生成的[BsonId] ObjectId Id字段复制到文档中的另一个字段(复制值)
我可以运行 Insert,它将生成密钥,然后运行 update 将密钥复制到另一个字段,但这将使数据库在(短暂的)一段时间内处于“软”状态。
是否可以“原子地”执行此操作,或者我使用 mongodb 是否错误?
我有一个存储以下数据的类:
public class User
{
public ObjectId _id { get; set; }
public string Name { get; set; }
public string Pass { get; set; }
public Dictionary<string, Tuple<string, string>> Quests { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
新用户的实例化如下:
await collection.InsertOneAsync(new User { Name = u, Pass = p,
Quests = new Dictionary<string,Tuple<string,string>>() });
Run Code Online (Sandbox Code Playgroud)
我知道如何从创建的文档中查找和提取信息,但不知道如何推送和保存对文档的更改。大多数在线答案都是针对旧的 Mongodb C# 驱动程序,因此诸如Query或 之类的东西.save()不存在,或者我没有将正确的包包含到我的程序中。
我希望能够向词典添加和删除条目,然后保存对文档的更改。有什么建议么?
我想在 MongoDb 查询中获得第一个前 10 个结果
为此我尝试了这样的事情
return _users.Collection.FindAll().Limit(10).ToList();
Run Code Online (Sandbox Code Playgroud)
但这不起作用,然后我根据大多数资源尝试了以下操作,但这也不起作用
return _users.Collection.Aggregate([{ "$limit": 10 }]).ToList();
Run Code Online (Sandbox Code Playgroud) 我对 Mongodb 和 C# 驱动程序完全陌生。
开发是在 Ubuntu 14.04 上使用 Monodevelop 完成的,Mongodb 的版本是 3.2.10 :
目前我的代码有一个 POCO 如下:
public class User
{
public String Name { get; set;}
public DateTime LastModifiedAt { get; set;}
public DateTime LastSyncedAt { get; set;}
public User ()
{
}
}
Run Code Online (Sandbox Code Playgroud)
已经能够创建集合并添加用户。
如何查找 LastModifiedAt 时间戳大于 LastSyncedAt 时间戳的用户?进行了一些搜索,但未能找到答案。
任何建议都会有很大的帮助
谢谢
我希望在使用 C# SDK 查询 MongoDB 时能够投影到另一种类型。
例如,下面我想使用 的构建器过滤器(或 LINQ 表达式)查询集合MyType,但我想将结果投影到MySubType。
var mySubTypes = Database
.GetCollection<MyType>("MyCollection")
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, documentId))
.ProjectTo<MySubType>() // Project to another type??
.ToList();
Run Code Online (Sandbox Code Playgroud)
人们可以想象MySubType它是 的子集MyType,用继承表示:
public class MyType : MySubType
{
[BsonElement("documents")]
public List<string> Documents { get; set; }
}
public class MySubType
{
[BsonElement("name")]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我为什么要这样做?
因为Documents数组非常大并且纯粹在数据库引擎内查询(即过滤)期间使用。检索和序列化该数组将是不必要的成本。
我是 MongoDb 的新手,我正在尝试将嵌套在父文档中的文档数组序列化为特定的类对象。
我的文档对象如下所示:
Project
{
"_id" : ObjectId("589da20997b2ae4608c99173"),
// ... additional fields
"Products" : [
{
"_id" : ObjectId("56971340f3a4990d2c199853"),
"ProductId" : null,
"Name" : null,
"Description" : null,
// ... quite a few more properties
"Properties" : null
}
],
"CreatorUserId" : LUUID("af955555-5555-5555-5555-f1fc4bb7cfae")
}
Run Code Online (Sandbox Code Playgroud)
所以基本上它是一个名为Project包含嵌套文档数组的文档Product。
以下是当前课程的样子:
public class Project : BaseClasses {
public ObjectId ParentCreatorUserIdProject { get; set; }
// ... additional Fields
public IEnumerable<IProjectItem> ProjectItems { get; set; }
//public IEnumerable<IProductDetails> Products { get; …Run Code Online (Sandbox Code Playgroud)