C# 过滤mongodb数据

C# 过滤mongodb数据,c#,.net,mongodb,mongodb-.net-driver,C#,.net,Mongodb,Mongodb .net Driver,我有以下型号: 基类: public abstract class Identifiable{ private ObjectId id; private string name; protected Identifiable(){ id = ObjectId.GenerateNewId(); } [BsonId] public ObjectId Id{ get { return id; } set

我有以下型号:

基类:

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; }
    }
}
名称是唯一的。
频道类

 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; }
    }
}
每日节目。name属性是存储为ddMMyyyy的日期:

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

    public IList<Program> DailyPrograms { get; set; }
}
现在,我想使用以下方法过滤特定频道的节目,以获取特定日期:

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;
    }
public daily编程GetProgramsForDate(字符串channelId,字符串prgDate){
ObjectId=新ObjectId(channelId);
IMongoQuery=query.And(query.EQ(c=>c.Id,Id),
EQ(dp=>dp.Name,prgDate));
var result=Database.GetCollection(CollectionName).Find(query).FirstOrDefault();
返回结果;
}
但它从不返回现有数据。如何检索日期频道的节目?
-

根据您的样本,我使用了
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();
var collection=database.GetCollection(“test6”);
变量id=新对象id(“54c00c65c215161c7ce2a77c”);
var query=query.And(query.EQ(c=>c.Id,Id),query.EQ(c=>c.DailyPrograming.Name,“2212015”);
var result=collection.Find(query.FirstOrDefault();
这个查询很好用

有一点:

您的收藏类型是
Chanel
而不是
daily programming
当您的收藏是香奈儿时,您必须使用
Query
并通过
Query.EQ(c=>c.DailyPrograming.Name,“2212015”)查询嵌套
DailyPrograming

var builder=Builders.Filter;
var filt=builder.Eq(“价格”、“9.20”)和builder.Eq(“产品名”、“WH-208”);
var list=await collection.Find(filt.toListSync();

我们可以使用“&”,而不是使用$and

处理
日常编程
集合时的
查询
没有任何意义。如果其possible@Disposer当然可以,谢谢。这是我在众多方法中的第一个,但不幸的是,当在ddbb中使用已知的现有值进行测试时,它返回null。它工作正常,感谢您的帮助!我仍在努力避免在关系世界中思考。
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();
  var builder = Builders<BsonDocument>.Filter;
  var filt = builder.Eq("Price", "9.20") & builder.Eq("ProductName","WH-208");
  var list =await collection.Find(filt).ToListAsync();