过滤 mongodb 数据

Filtering mongodb data

我有以下型号:

基础class:

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

名称是唯一的。
一个频道class

 public class Channel : Identifiable{
    private DateTime creationDate;

    private string url;
    private DailyPrograming dailyPrograming;

    public DailyPrograming DailyPrograming{
        get { return dailyPrograming; }
        set { dailyPrograming = value; }
    }

    public DateTime CreationDate{
        get { return creationDate; }
        set { creationDate = value; }
    }

    public string Url{
        get { return url; }
        set { url = value; }
    }
}

日常节目。名称 属性 是存储为 ddMMyyyy:

的日期
public class DailyPrograming : Identifiable{
    public DailyPrograming(){
        DailyPrograms = new List<Program>(30);
    }

    public IList<Program> DailyPrograms { get; set; }
}

节目:

public class Program : Identifiable{
    private DateTime programDate;
    private string category;
    private string description;

    public DateTime ProgramDate{
        get { return programDate; }
        set { programDate = value; }
    }

    public string Category{
        get { return category; }
        set { category = value; }
    }

    public string Description{
        get { return description; }
        set { description = value; }
    }
}

现在,我想过滤特定日期特定频道的节目:

public DailyPrograming GetProgramsForDate(string channelId, string prgDate){
        ObjectId id = new ObjectId(channelId);
        IMongoQuery query = Query.And(Query<Channel>.EQ(c => c.Id, id), 
            Query<DailyPrograming>.EQ(dp => dp.Name, prgDate));
        var result = Database.GetCollection<DailyPrograming>(CollectionName).Find(query).FirstOrDefault();
        return result;
    }

但它从不 returns 现有数据。如何检索某个日期的频道节目? -

根据你的示例,我使用了 id = "54c00c65c215161c7ce2a77c"prgDate = "2212015"

然后我将查询更改为:

var collection = database.GetCollection<Channel>("test6");
var id = new ObjectId("54c00c65c215161c7ce2a77c");
var query = Query.And(Query<Channel>.EQ(c => c.Id, id), Query<Channel>.EQ(c => c.DailyPrograming.Name, "2212015"));
var result = collection.Find(query).FirstOrDefault();

这个查询工作正常

某点:

Your collection type is Chanel not DailyPrograming When your collection is Chanel you have to use Query<Channel> and query nested DailyPrograming via Query<Channel>.EQ(c => c.DailyPrograming.Name, "2212015")

var builder = Builders<BsonDocument>.Filter;
var filt = builder.Eq("Price", "9.20")
         & builder.Eq("ProductName", "WH-208");
var list = await collection.Find(filt).ToListAsync();

我们可以用&代替$and。另一个例子见 this post