Поиск на основе элемента массива вложенных документов, совпадающего с элементом другого массива вложенных документов - PullRequest
0 голосов
/ 02 января 2019

Как мне написать 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, с датой, которая попадает между fromDate и toDate любого элемента их dataSet2 И
  • Люди, которыеесть элемент 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" ]
            }           
        }
    );

, что заставляет меня подозревать, что формат и неправильный, или мне нужно каким-то образом использовать elemMatch.

Но тогда я все равноне знаю, как идти о второй части - там, где нет совпадения.Есть ли хороший способ делать такие запросы в mongodb?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...