我想对字符串数组执行搜索并将其与字符串列表中的任何字符串进行比较。例如:
这是数据结构:
{
"CategoryIds": [ "A123", "B456", "C789" ]
}
Run Code Online (Sandbox Code Playgroud)
这是搜索词:
List<string> search = new List<string> { "A123", "C789" };
Run Code Online (Sandbox Code Playgroud)
我正在动态构建搜索查询,因此我定义了以下内容:
var builder = Builders<Item>.Filter;
ar filters = Builders<Item>.Filter.Empty;
Run Code Online (Sandbox Code Playgroud)
我已尝试过以下所有方法,但没有一个有效:
使用ElemMatch
filters &= builder.ElemMatch(i => i.CategoryIds, id => search.CategoryIds.Any(i => i.Equals(id)));
Run Code Online (Sandbox Code Playgroud)
使用Intersect
filters &= builder.Where(i => search.CategoryIds.Intersect(i.CategoryIds).Any());
Run Code Online (Sandbox Code Playgroud)
唯一有效的就是这个:
var categoryFilters = new List<FilterDefinition<Item>>();
foreach (string id in search.CategoryIds)
categoryFilters.Add(builder.AnyEq(i => i.CategoryIds, id));
if (categoryFilters.Any())
filters &= builder.Or(categoryFilters);
Run Code Online (Sandbox Code Playgroud)
但这似乎有点矫枉过正。有更简单的方法吗?
我正在创建一个 ASP.NET Web API 来在 MongoDB 数据库中执行 CRUD 操作。我已经能够根据以下 Microsoft 教程创建一个简单的应用程序:使用 ASP.NET Core 和 MongoDB 创建 Web API。
本教程和我发现的其他教程一样,都使用定义的数据模型(在上面的教程中是 Book 模型)。就我而言,我需要使用通用 JSON 对象执行 CRUD 操作。例如,JSON 对象可能是以下任意示例:
示例#1:
{_id: 1, name: 'Jon Snow', address: 'Castle Black', hobbies: 'Killing White Walkers'}
Run Code Online (Sandbox Code Playgroud)
示例#2:
{_id: 2, name: 'Daenerys Targaryen', family: 'House Targaryen', titles: ['Queen of Meereen', 'Khaleesi of the Great Grass Sea', 'Mother of Dragons', 'The Unburnt', 'Breaker of Chains', 'Queen of the Andals and the First Men', 'Protector of the Seven …Run Code Online (Sandbox Code Playgroud) 我目前正在试图弄清楚,Nosql数据库如何处理关系以及文档的唯一ID真正意味着什么.
也许我期待MongoDb过多,或者我还没有掌握NoSQL数据库中的关系概念.
基本上,以下测试失败,我想知道如何模拟用户和组之间的这种关系(这是1:0..N关系).
[TestFixture]
public class MongoDbExamples
{
private MongoServer _mongoServer;
[TestFixtureSetUp]
public void FixtureSetUp()
{
_mongoServer = MongoServer.Create();
}
[TestFixtureTearDown]
public void FixtureTearDown()
{
_mongoServer.Disconnect();
}
[Test]
public void RelationTest()
{
var database = _mongoServer.GetDatabase("StackoverflowExamples");
var p = new Person() { Name = "Testperson" };
var persons = database.GetCollection<Person>("Persons");
persons.Save<Person>(p);
var group = new Group() { Description = "A fancy descriptor" };
group.Add(p);
var groups = database.GetCollection<Group>("Groups");
groups.Save<Group>(group);
var readPerson = persons.FindOneById(p.Id);
readPerson.Name = "a different name";
// since …Run Code Online (Sandbox Code Playgroud) 我知道我可以通过设置特定字段来原子地更新现有的Mongo文档。下面的代码可以做到这一点:
var update = MongoDB.Driver.Builders.Update.Set("InsideLegMeasurement", 32.4);
SafeModeResult result = personCollection.Update(query, update, UpdateFlags.Multi,SafeMode.True);
Run Code Online (Sandbox Code Playgroud)
但是,我可以通过传入要与现有文档“合并”的文档来自动更新几个字段吗?想象一下,我有一个文档如下:{“ favcolor”:“ red”,“ favfood”:“ pasta”},我想用这些值更新现有文档。我想做这个:
var update = MongoDB.Driver.Builders.Update.Merge({"favcolor":"red","favfood":"pasta"});
Run Code Online (Sandbox Code Playgroud)
甚至
var update = MongoDB.Driver.Builders.Update.Merge(myUpdateBsonDoc);
Run Code Online (Sandbox Code Playgroud)
其中myBsonDocument包含很多字段,我不想从要与原始文档合并的文档中“解包”。
这有可能吗?
谢谢
我想在类声明中定义哪些项是索引,类似于:
public class MyClass {
public int SomeNum { get; set; }
[THISISANINDEX]
public string SomeProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
所以与ensureIndex("SomeProperty")具有相同的效果
这可能吗?
我想基于几个字段对一个MongoDB集合进行排序,一些是升序,另一些是降序.我正在使用官方的C#驱动程序.我的代码目前看起来像这样:
string[] sortFields = new[] { "surname", "firstname","companyname","email" };
MongoDB.Driver.Builders.SortByBuilder sort = MongoDB.Driver.Builders.SortBy.Ascending(sortFields);
foreach (MongoDB.Bson.BsonDocument doc in contactsCollection.FindAs<MongoDB.Bson.BsonDocument>(query).SetSortOrder(sort))
{
...
Run Code Online (Sandbox Code Playgroud)
如何更改此代码以便对电子邮件进行降序排序?
非常感谢.
我刚刚将我的Mongo-C#驱动程序从1.6.1更新到1.8.1,我意识到它们已经使许多功能过时了.由于弃用而我看到的错误之一是:
Convention Profile已经过时,请用IConventionsPack替换它.
现在,问题是没有太多关于IConeventionPack的文档或如何使用它.我发布了一个小代码片段,任何人都可以建议如何使用IConventionPack处理这个问题?
var conventions = new ConventionProfile();
conventions.SetIgnoreIfNullConvention(new AlwaysIgnoreIfNullConvention());
BsonClassMap.RegisterConventions(conventions, t => true);
Run Code Online (Sandbox Code Playgroud)
谢谢.
我有以下型号:
基类:
public abstract class Identifiable{
private ObjectId id;
private string name;
protected Identifiable(){
id = ObjectId.GenerateNewId();
}
[BsonId]
public ObjectId Id{
get { return id; }
set { id = value; }
}
[BsonRequired]
public string Name{
get { return name; }
set { name = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
这个名字很独特.
一个频道类
public class Channel : Identifiable{
private DateTime creationDate;
private string url;
private DailyPrograming dailyPrograming;
public DailyPrograming DailyPrograming{
get { return dailyPrograming; }
set { dailyPrograming = value; …Run Code Online (Sandbox Code Playgroud) 好的,在工作中我们正在使用MVC C#和MongoDB开发一个系统.在第一次开发时,我们认为遵循Repository模式可能是一个好主意(屁股中的痛苦!),这里是代码,用于了解当前实现的内容.
MongoRepository类:
public class MongoRepository { }
public class MongoRepository<T> : MongoRepository, IRepository<T>
where T : IEntity
{
private MongoClient _client;
private IMongoDatabase _database;
private IMongoCollection<T> _collection;
public string StoreName {
get {
return typeof(T).Name;
}
}
}
public MongoRepository() {
_client = new MongoClient(ConfigurationManager.AppSettings["MongoDatabaseURL"]);
_database = _client.GetDatabase(ConfigurationManager.AppSettings["MongoDatabaseName"]);
/* misc code here */
Init();
}
public void Init() {
_collection = _database.GetCollection<T>(StoreName);
}
public IQueryable<T> SearchFor() {
return _collection.AsQueryable<T>();
}
}
Run Code Online (Sandbox Code Playgroud)
IRepository接口类:
public interface IRepository { }
public interface …Run Code Online (Sandbox Code Playgroud)