我是mongodb + C#驱动程序的新手,所以请原谅我的任何天真.
我正在尝试对一组键值对进行批量插入,因此我的数据结构是类型的List<Dictionary<string,string>>.
这是我的持久性代码示例:
public void Persist(string collectionName, List<Dictionary<string, string>> documents)
{
string connectionString = ConfigurationManager.ConnectionStrings[CONNECTION_STRING_KEY].ConnectionString;
MongoServer server = MongoServer.Create(connectionString);
MongoCredentials credentials = new MongoCredentials("MYUser", "MyPassword");
MongoDatabase myDb = server.GetDatabase("myDb", credentials);
var collection = myDb .GetCollection(collectionName);
using (server.RequestStart(myDb ))
{
var result = collection.InsertBatch(documents);
}
}
Run Code Online (Sandbox Code Playgroud)
我收到有关序列化的错误:
MongoDB.Bson.BsonSerializationException:Serializer DictionarySerializer期望类型为DictionarySerializationOptions的序列化选项,而不是DocumentSerializationOptions.
我错过了设置吗?
编辑:更多信息
我的词典是我的实体.意思是,我只是将它们转储成一个,而不是创建一个保存属性的对象Dictionary.从mongo文档来看,它应该只是转换为mongo Document.
进一步编辑:扭曲问题
我可以通过将using语句更改为:来插入单个实例:
using (server.RequestStart(myDb))
{
foreach(var doc in documents)
collection.Insert(new BsonDocument(doc));
//var result = collection.InsertBatch(typeof(Dictionary<string, string>), documents);
}
Run Code Online (Sandbox Code Playgroud)
但是,我关注的是性能,因为在真实情况下我会轻松拥有10k +词典.使用此代码,驱动程序是否足够智能批量处理这些代码?有没有办法保持InsertBatch但完成同样的事情?
当然,任何帮助都非常感谢.
我已经使用MongoDB一段时间了,看到fsync等待数据刷新到磁盘.好的,所以我认为这是数据安全的解决方案.
它花了很长时间,比SQL替代方案更好.然后我看到我可以把它syncdelay放到0,然后速度回来了,但我想到将来会有很多并发请求.所以我fsync从更新中删除了syncdelay选项并插入并删除了配置选项.
为了测试数据是否正在写入,我在更新后快速检查了Rockmongo并且数据实际存在,超快!
所以真的,fsync如果它使写入变慢而没有它写入发生,并且反正快速是什么?
我一直在通过命名空间提供的WebClient对象从FTP服务器下载文件.NET,然后通过a将字节写入实际文件BinaryWriter.一切都很好.但是,现在,文件的大小已经大大增加,我担心内存限制,所以我想创建一个下载流,创建一个文件流,逐行读取下载并写入文件.
我很紧张,因为我找不到一个很好的例子.这是我的最终结果:
var request = new WebClient();
// Omitted code to add credentials, etc..
var downloadStream = new StreamReader(request.OpenRead(ftpFilePathUri.ToString()));
using (var writeStream = File.Open(toLocation, FileMode.CreateNew))
{
using (var writer = new StreamWriter(writeStream))
{
while (!downloadStream.EndOfStream)
{
writer.Write(downloadStream.ReadLine());
}
}
}
Run Code Online (Sandbox Code Playgroud)
我是否会采用这种不正确/更好的方式/等等?
使用FluentMigrator,有没有办法找出MigrateUp()函数是否确实会迁移某些东西或者它是否已经是最新的?
我有2个具有相同列数的Datagrids
Datagrid1仅显示标题,
Datagrid2在其下方显示所有数据.实质上,2个网格需要同步才能显示为1个网格.
我的问题是我需要隐藏水平滚动条datagrid1,但只显示该滚动条datagrid2.当用户滚动时datagrid2,我需要以编程方式同步标题datagrid1.
谁有人建议?
样本数据csv格式.保存在文件中broken_posix.csv
Date
3/10/2012 23:00
3/11/2012 0:00
3/11/2012 1:00
3/11/2012 2:00
3/11/2012 3:00
3/11/2012 4:00
3/11/2012 5:00
3/11/2012 6:00
3/11/2012 7:00
3/11/2012 8:00
3/11/2012 9:00
3/11/2012 10:00
3/11/2012 11:00
3/11/2012 12:00
3/11/2012 13:00
3/11/2012 14:00
3/11/2012 15:00
3/11/2012 16:00
3/11/2012 17:00
3/11/2012 18:00
3/11/2012 19:00
3/11/2012 20:00
3/11/2012 21:00
3/11/2012 22:00
3/11/2012 23:00
3/12/2012 0:00
3/12/2012 1:00
3/12/2012 2:00
3/12/2012 3:00
3/12/2012 4:00
3/12/2012 5:00
3/12/2012 6:00
3/12/2012 7:00
3/12/2012 8:00
3/12/2012 9:00
3/12/2012 10:00
3/12/2012 11:00
Run Code Online (Sandbox Code Playgroud)
嗨伙计们,所以我有这个文件, …
我遇到一个问题,将一些表格串联在一起,从korma函数对结果集进行一些ETL.
我从korma sql回来了:
({:id 1 :some_field "asd" :children [{:a 1 :b 2 :c 3} {:a 1 :b 3 :c 4} {:a 2 :b 2 :c 3}] :another_field "qwe"})
我想通过获取:a关键字为1 的"children"来过滤此结果集.
我的尝试:
;mock of korma result
(def data '({:id 1 :some_field "asd" :children [{:a 1 :b 2 :c 3} {:a 1 :b 3 :c 4} {:a 2 :b 2 :c 3}] :another_field "qwe"}))
(-> data
first
:children
(filter #(= (% :a) 1)))
Run Code Online (Sandbox Code Playgroud)
我在这里期待的是一个哈希图矢量:a设置为1,即:
[{:a 1 :b 2 :c 3} …Run Code Online (Sandbox Code Playgroud) 我试图将变量属性信息转储到一个简单的字符串,但当它到达我的可as string空bool时,总是返回null - 即使实际值为true | 假!
StringBuilder propertyDump = new StringBuilder();
foreach(PropertyInfo property in typeof(MyClass).GetProperties())
{
propertyDump.Append(property.Name)
.Append(":")
.Append(property.GetValue(myClassInstance, null) as string);
}
return propertyDump.ToString();
Run Code Online (Sandbox Code Playgroud)
没有例外; 快速和输出正是我想要的,除了任何属性bool?总是假的.如果我快速观看并做到.ToString()这一点!但我不能保证其他属性不是,实际上是null.
谁能解释为什么会这样?甚至更好,一个解决方法?
我有一个名为boolean的模型 draft
我只想验证字段的存在draft == false.
我的模特
if self.draft == false
validates :name, :presence => true, :length => { :maximum => 45 }
validates :description, :presence => true
validates :blurb, :presence => true, :length => { :maximum => 175 }
validates :category_id, :presence => true
validates :location_id, :presence => true
validates :goal, :presence => true
else
end
Run Code Online (Sandbox Code Playgroud)
在我的控制器中
def new
@item.new(:draft => false) || @item.new(:draft => true)
def create
if params[:commit] == "Create Item"
@cause = Item.new(params[:item], :draft => …Run Code Online (Sandbox Code Playgroud) 我们在[Authorize (Roles="yadda, yadda2")]控制器上使用了这个属性,我想知道是否有一个内置机制来发现他们是否可以从视图访问?
[Authorize (Roles="System Administrator, Administrator")]
public abstract class OperationsBaseContoller : BaseController
{
// omitted
}
// some view
@if(HasAccessTo<OperationsBaseController>())
{
<a href="#somewhereInOperations">Operations Action</a>
<a href="#anotherInOps">Example</a>
<a href="#oneMore">filler</a>
}
Run Code Online (Sandbox Code Playgroud)
像上面这样的东西会很棒,所以我可以避免渲染无法传递给他们的链接.我不是,但是,想要把列表中可用角色的观点再次在User.IsInRole("...."),因为这似乎是一个维护/重复代码的噩梦.我想如果他们给了我们属性,他们还给出了从视图中检查它的内置方法.
如果没有(我自己找不到),我会写自己的,但想避免潜在的车轮改造.