4

特定の日付範囲にある「date」属性を持つドキュメントをmongodbに照会しようとしています。これが、私が行っている方法です。

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
            );

これも機能し、私が要求したものと等しいすべての蓋を返します。

しかし、これらを条件にANDしたい場合、それは機能しません。これが検索条件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}}

クエリのjson出力をmongoシェルで実行すると、エラーが発生します

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を間違って設定していると思います。

4

1 に答える 1

7

A1 / A2:$などは必要ありません。代わりに次を使用してください。

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

シェルで{"$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 } );
于 2012-11-12T22:07:17.113 に答える