我使用MongoDB C#驱动程序以编程方式创建了一个新的文档集合.
此时我想以编程方式创建和构建索引.我怎样才能做到这一点?
在mongodb的官方文档中,他们提到了upserts,所以编写一个upsert命令而不是:
if (_campaignRepo.Exists(camp))
{
_campaignRepo.DeleteByIdAndSystemId(camp);
}
_campaignRepo.Save(camp);
Run Code Online (Sandbox Code Playgroud)
如果可能的话,可以在db级别实现该逻辑的东西.那么如果有一个upsert的方法是什么?
你怎么做相当于
SELECT
MIN(Id) AS MinId
FROM
Table
Run Code Online (Sandbox Code Playgroud)
在MongoDB中.看起来我将不得不使用MapReduce,但我找不到任何显示如何执行此操作的示例.
谢谢.
我最近发现MongoDB中的所有查询都区分大小写.如何进行不区分大小写的搜索?
我找到了一种方法:
Query.Matches(
"FirstName",
BsonRegularExpression.Create(new Regex(searchKey,RegexOptions.IgnoreCase)));
Run Code Online (Sandbox Code Playgroud) 我正在使用官方MongoDB C#Drive v0.9.1.26831,但我想知道给定一个POCO类,无论如何都要忽略某些属性插入.
例如,我有以下类:
public class GroceryList
{
public string Name { get; set; }
public FacebookList Owner { get; set; }
public bool IsOwner { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让IsOwner在插入GroceryList对象时不插入?基本上,我从数据库中获取对象,然后在应用程序层中设置IsOwner属性,然后将其返回到控制器,然后将对象映射到视图模型.
希望我的问题有道理.谢谢!
我如何将此mongo查询转换为C#中的Query.EQ语句?
db.users.find({name: 'Bob'}, {'_id': 1});
Run Code Online (Sandbox Code Playgroud)
换句话说,我不希望一切都返回到C# - 只需要我需要的一个元素,即_id.与往常一样,Mongo C#驱动程序教程没有帮助.
从服务器获取后,如何将BsonDocument对象反序列化回类?
QueryDocument _document = new QueryDocument("key", "value");
MongoCursor<BsonDocument> _documentsReturned = _collection.FindAs<BsonDocument>(_document);
foreach (BsonDocument _document1 in _documentsReturned)
{
//deserialize _document1
//?
}
Run Code Online (Sandbox Code Playgroud)
我是否使用BsonReader进行反序列化?
我已经将documents插入MongoDB而没有id.我想通过搜索默认分配的MongoDBObjectId来检索它们.
这是我的尝试 -
var query_id = Query.EQ("_id", "50ed4e7d5baffd13a44d0153");
var entity = dbCollection.FindOne(query_id);
return entity.ToString();
Run Code Online (Sandbox Code Playgroud)
我得到以下错误 -
发生了'System.NullReferenceException'类型的第一次机会异常
问题是什么?
我目前正在将我的代码升级到MongoDB C#驱动程序2.0,并且我在升级代码以更新文档时遇到问题.
使用旧版本,我能够做到这样的事情:
MyType myObject; // passed in
var collection = _database.GetCollection<MyType>("myTypes");
var result = collection.Save(myObject);
Run Code Online (Sandbox Code Playgroud)
我很难在新版本中找到一种方法.我找到了一些更新单个字段的例子
var filter = Builders<MyType>.Filter.Eq(s => s.Id, id);
var update = Builders<MyType>.Update.Set(s => s.Description, description);
var result = await collection.UpdateOneAsync(filter, update);
Run Code Online (Sandbox Code Playgroud)
我想用旧方法更新所有字段,方法是Save.
有任何想法吗 ?
非常感谢
我知道MongoDB不应该支持工作单元等.但我认为实现只存储意图(类似于标准)然后将它们提交给数据库的存储库会很好.否则,在存储库中的每个方法中,您都必须创建与DB的连接,然后将其关闭.如果我们将连接放置在某个BaseRepository类中的DB,那么我们将我们的存储库绑定到具体的数据库,并且测试存储库非常困难,以测试解决存储库的IoC.
在MongoDB中创建会话是个坏主意吗?有没有办法将连接逻辑与存储库分开?
以下是Rob Conery的一些代码.在每次请求时总是连接到您的数据库是一个好主意吗?什么是最佳做法?
还有一件事.想象一下,我想为集合提供索引.以前我在构造函数中做过,但是使用Rob的方法,这似乎不符合逻辑.
using Norm;
using Norm.Responses;
using Norm.Collections;
using Norm.Linq;
public class MongoSession {
private string _connectionString;
public MongoSession() {
//set this connection as you need. This is left here as an example, but you could, if you wanted,
_connectionString = "mongodb://127.0.0.1/MyDatabase?strict=false";
}
public void Delete<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression) where T : class, new() {
//not efficient, NoRM should do this in a way that sends a single command to MongoDB.
var items = All<T>().Where(expression);
foreach (T item …Run Code Online (Sandbox Code Playgroud)