【问题标题】:c# mongodb find derived object with Builders时间:2019-05-10 标签:c#mongodb findderived object with Builders
【发布时间】:2017-03-27 15:39:16
【问题描述】:

我有两个集合,其中存储了从同一个对象继承的两个不同的对象(每个对象代表一个对象)。

类似:

public abstract class BaseClass
{
    public string name = "someName";
}

public class FirstClass : BaseClass { ... }
public class SecondClass : BaseClass { ... }

var FirstCollection = mongo.GetCollection<FirstClass>("First");
var SecondClass =    mongo.GetCollection<SecondClass>("Second");

现在,我有一个查询来运行这两个集合,只使用公共字段。 我想使用相同的查询,使用“MongoDB.Driver.Builders”。

类似:

var filter = Builders<BaseClass>.Filter.Where(y => y.name == "someName");
var result = FirstCollection.Find(filter);

知道怎么做吗?

【问题讨论】:

    标签: c# mongodb mongodb-.net-driver


    【解决方案1】:

    通过以下设置,您可以或多或少地像您已经做的那样做。这是上下文:

    public class Context
    {
        public const string DATABASE_NAME = "Test";
        public const string FIRST_COLLECTION_NAME = "FirstCollection";
        public const string SECOND_COLLECTION_NAME = "SecondCollection";
    
        private static readonly IMongoClient _client;
        private static readonly IMongoDatabase _database;
        static Context()
        {
            var connectionString = ConfigurationManager.AppSettings["MongoDbServer"];
            _client = new MongoClient(connectionString);
            _database = _client.GetDatabase(DATABASE_NAME);
        }
    
        public IMongoClient Client => _client;
    
        public IMongoCollection<First> FirstCollection =>
            _database.GetCollection<First>(FIRST_COLLECTION_NAME);
    
        public IMongoCollection<Second> SecondCollection =>
            _database.GetCollection<Second>(SECOND_COLLECTION_NAME);
    }
    

    FirstSecondBase 类与您的类相同。然后你可以像这样找到你的文件:

    var context = new Context();
    var builder = Builders<First>.Filter;
    var filter = builder.Eq(x => x.Name, "Paul");
    //You can insert like this:
    //context.FirstCollection.InsertOne(new First(){Name = "Paul", Age = 33});
    var result = context.FirstCollection.Find(filter).ToList();
    

    更新

    在您编辑之后,我能想到的唯一方法是:

    var result = context.FirstCollection.Find(x=> x.Name == "Paul").ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 2012-07-29
      • 1970-01-01
      • 2010-11-23
      • 2020-06-15
      相关资源
      最近更新 更多