2017-03-27 107 views
0

我有兩個集合,它存儲兩個不同的對象(每個對象表示一個對象),它們從同一個對象繼承。c#mongodb找到派生對象的派生對象

喜歡的東西:

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); 

任何想法如何能做到呢?

回答

0

通過以下設置,您可以或多或少地完成與已經完成的操作相同的操作。這是上下文:

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(); 
+0

我做了一個錯誤,我的問題。 我想要的是使用這個構建器:建設者。 我也編輯了qustion。 – AvrahamL