我有2个集合,分别由以下类表示:
[BsonIgnoreExtraElements]
public class Store : EntityBase
{
public string StoreId {get; set;}
public string StoreName {get; set;}
public string Province {get; set;}
}
[BsonIgnoreExtraElements]
public class RestrictedTimes : EntityBase
{
public string StoreId { get; set; }
public string Province {get; set;}
public DateTime UTCStartDate { get; set; }
public DateTime UTCEndDate { get; set; }
}:
当我们搜索商店列表时,我们必须过滤出在RestrictedTimes集合中有限制时间的商店 在我们当前的过程中,我们为商店构建一个聚合查询,然后对RestrictedTimes进行单独的查询,并传入上一个查询的StoreId列表。 我们要消除不必做2个查询。我们想将RestrictedTimes查询添加为FilterDefinition的一部分。因此,我们使用Robo 3T中的$ lookup创建一个与此查询类似的查询,以查看$ lookup的工作原理:
db.getCollection('Store').aggregate([
{"$lookup" : {
"from" : "RestrictedTimes",
"localField" : "StoreId",
"foreignField": "StoreId",
as : "restrictedTime_docs"
}} ,
{$match : {"restrictedTime_docs" : {$size: 0} }},
{$project :{"restrictedTime_docs" : 0}}
])
我对MongoDB和FilterDefinitions相对较新。我想知道创建包含2个集合的过滤器的最佳方法是什么?该过滤器将作为更大过滤器的一部分添加。 我应该使用linq在2个集合上创建联接吗?还是将上面的查询合并到过滤器定义中? 过滤器的最终版本将检查RestrictedTimes集合,以查看是否在其中找到了StoreId以及在哪些日期受到限制。