Mongo查询:$存在NULL值

wou*_*_be 4 mongoose mongodb

我在Mongo集合中有以下对象:

{ 
    "active" : true,
    "startDate": Date( 1434355148265 ), // Mon Jun 15 2015 15:59:08 GMT+0800 (HKT)
    "endDate": null,
    "lastFeedSearch": null,
    "lastTopicSearch": null
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试运行以下查询,但它似乎没有返回任何对象

{  
   "active":true,
   "$and":[  
        {  
         "$or":[  
            {  
               "startDate":{  
                  "$exists": false
               }
            },
            {  
               "startDate":{  
                  "$lte": "2015-06-16T07:07:30+00:00"
               }
            }
         ]
      },
      {  
         "$or":[  
            {  
               "endDate":{  
                  "$exists": false
               }
            },
            {  
               "endDate":{  
                  "$gte": "2015-06-16T07:07:30+00:00"
               }
            }
         ]
      },
      {  
         "$or":[  
            {  
               "$or":[  
                  {  
                     "lastTopicSearch":{  
                        "$lte": "2015-06-16T06:07:30+00:00"
                     }
                  },
                  {  
                     "lastTopicSearch":{  
                        "$exists": false
                     }
                  }
               ]
            },
            {  
               "$or":[  
                  {  
                     "lastFeedSearch":{  
                        "$lte": "2015-06-16T06:52:30+00:00"
                     }
                  },
                  {  
                     "lastFeedSearch":{  
                        "$exists": false
                     }
                  }
               ]
            }
         ]
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

据我所知,所有这些$or条件至少应该匹配.据我所知,这是因为虽然文档说应该考虑$existsnull价值,但似乎没有考虑到价值.

Leo*_*tny 7

来自MongoDB官方$exists文档:

<boolean>为true时,$ exists匹配包含该字段的文档,包括字段值为null的文档.如果<boolean>为false,则查询仅返回不包含该字段的文档.

换句话说,$existsnulls 计为有效值.因此,{"$exists": false}只匹配相应字段所在的文档undefined,而不是null.

请尝试匹配您的字段null:

{
    "lastTopicSearch": null
}
Run Code Online (Sandbox Code Playgroud)

此查询将匹配两者nullundefined值.