根据与另一个子文档数组的元素匹配的子文档数组的元素进行查找

时间:2019-01-02 15:25:54

标签: mongodb mongodb-query

我如何编写mongodb查询,其中包括诸如“一个子文档中的任何一个与另一个子文档中的任何一个匹配?”之类的条件?

例如,假设我具有这样的结构:

{
    personNumber: 3,
    dataSet1: 
    [
        { date: new Date(2018,4,1), // ... }
        { date: new Date(2018,5,1), // ... }
    ],
    dataSet2:
    [
        { fromDate: new Date(2018,3,1), toDate: new Date(2018,5,1), //... }
        { fromDate: new Date(2018,7,1), toDate: new Date(2018,7,2), //... }     
    ]
}

我如何执行查询:

  • 具有dataSet1元素的人们,其日期介于其dataSet2的任何元素的fromDate和toDate之间 还有
  • 具有dataSet2元素但没有dataSet1元素且其日期介于fromDate和toDate之间的人?

根据我发现的一些信息,我尝试了此操作:

    db.test.find( 
        {
            $expr:
            {
                $and:
                [
                    { $gt: [ "$dataSet1.date", "$dataSet2.fromDate" ] },
                    { $lt: [ "$dataSet1.date", "$dataSet2.toDate" ] }
                ]
            }           
        }
    );

但这似乎总是返回0个结果。如果删除,我会得到一些东西:

    db.test.find( 
        {
            $expr:
            {
               $gt: [ "$dataSet1.date", "$dataSet2.fromDate" ]
            }           
        }
    );

这让我怀疑and的格式错误,或者我需要以某种方式使用elemMatch。

但是后来我仍然不知道该怎么做第二部分-没有比赛。在mongodb中是否有很好的方法进行这类查询?

0 个答案:

没有答案