Osc*_*car 3 .net c# 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 { 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; }
}
public DateTime CreationDate{
get { return creationDate; }
set { creationDate = value; }
}
public string Url{
get { return url; }
set { url = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
每日节目.name属性是存储为ddMMyyyy的日期:
public class DailyPrograming : Identifiable{
public DailyPrograming(){
DailyPrograms = new List<Program>(30);
}
public IList<Program> DailyPrograms { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
节目:
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; }
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想使用以下方法过滤特定日期的某个频道的节目:
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;
}
Run Code Online (Sandbox Code Playgroud)
但它永远不会返回现有数据.如何检索日期频道的节目? -
小智 11
var builder = Builders<BsonDocument>.Filter;
var filt = builder.Eq("Price", "9.20") & builder.Eq("ProductName","WH-208");
var list =await collection.Find(filt).ToListAsync();
Run Code Online (Sandbox Code Playgroud)
我们可以使用'&'而不是使用$和. 参考链接
根据你的样本我使用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();
Run Code Online (Sandbox Code Playgroud)
这个查询工作正常
几点:
您的集合类型不是
Chanel当DailyPrograming您的集合是 Chanel 时,您必须使用Query<Channel>和查询嵌套DailyPrograming方式Query<Channel>.EQ(c => c.DailyPrograming.Name, "2212015")