基于2个不同的MongoDB集合创建过滤器

时间:2019-01-22 07:19:09

标签: c# mongodb join filter

我有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以及在哪些日期受到限制。

0 个答案:

没有答案