MongoDB搜索使用日期范围和另一个条件

时间:2012-11-12 22:00:47

标签: php mongodb

我正在尝试查询mongodb以查找具有特定日期范围的'date'属性的文档,这就是我正在做的事情。

Q1。

$searchCriteria = array('$and' => 
        array(
            'date' => array('$gt' => $start, '$lte' => $end),
            'lid' => $lid
            ));

Q2。

$results = $collection->find($searchCriteria);

它不会返回任何内容,但如果我单独运行每个搜索条件,它们就会起作用。

Q3。

$searchCriteria = array(
            'date' => array('$gt' => $start, '$lte' => $end)
            );

这样可行,它会返回与此日期范围匹配的文档

    $searchCriteria = array(
            'lid' => $lid
            );

这也有效,所有盖子都等于我的要求。

但是当我想要将这些条件设置为条件时,它不起作用,这里是搜索条件Q1的var_dump:

array(1) { '$and' => array(2) { 'date' => array(2) { '$gt' => string(10) "2010-11-10" '$lte' => string(10) "2010-11-12" } 'lid' => int(6209) } }

以下是同一查询的json_encoded输出:

{"$and":{"date":{"$gt":"2010-11-10","$lte":"2010-11-12"},"lid":6209}}

在mongo shell中运行查询的json输出会导致错误

db.largedaily.find({"$and":{"date":{"$gt":"2010-01-01","$lte":"2010-01-02"},"lid":6209}});

error: { "$err" : "$and expression must be a nonempty array", "code" : 14816 }

我做错了什么?我想我正在设置searchCriteria错误。

1 个答案:

答案 0 :(得分:7)

A1 / A2:你不需要$和那样,而是使用:

$searchCriteria = array(
    'date' => array('$gt' => $start, '$lte' => $end),
    'lid' => $lid
);

在shell上,此{"$and":{"date":{"$gt":"2010-11-10","$lte":"2010-11-12"},"lid":6209}}不正确,因为您需要使用数组(带[])而不是对象({})。正确的是:

{"$and":[ {"date":{"$gt":"2010-11-10","$lte":"2010-11-12"} }, {"lid":6209} ]}

但是你不需要$and,你可以使用:

db.largedaily.find( {"date":{ "$gt":"2010-11-10","$lte":"2010-11-12"}, {"lid":6209 } );