2016-07-12 9 views
0

を存在しない可能性があり、私は少しこのようになります文書持つ配列の要素を検索します。私は見つけることを試みている何または

> db.orders.find() 
{ 
    _id: ObjectId(), 
    _reminders: [{ 
    notified: true, 
    timestamp: ISODate(), 
    completed: false 
    }] 
} 
{ 
    _id: ObjectId(), 
    _reminders: [] 
} 

する「リマインダー」の受注コレクション内の文書であります特定の時間範囲内にリマインダーが含まれていないため、完了していません。

db.orders.find({ 
    '_reminders': { 
    $elemMatch: { 
     completed: false, 
     timestamp: { $ne: time } 
    } 
    } 
}); 

問題は、リマインダーがまったくない注文が見つからないことです。

これをどのようにクエリしますか?

答えて

2

でクエリし、これらが一致両方のドキュメントを返します。これは何をしたいあなたを取得する必要があります

db.getCollection('Clock').find({ 
$or : [ 
    { 
     _reminders : { 
       $elemMatch : { 
        timestamp : { 
         $lte : ISODate("2019-07-12T15:35:32.278Z"), 
         $gte : ISODate("2012-07-12T15:35:32.278Z") 
         }, 
        completed : false 
       } 
     } 
    }, 
    { 
     _reminders : {$size : 0}  
    }, 
    { 
     _reminders : {$exists : false} 
    } 
] 

})

2

$orクエリを使用する必要があります。

db.orders.find({$or: [ { _reminders: [] }, here_put_your_query_with_time_match ]}) - それは空の_reminders

関連する問題