1

私は公式のC#mongodbドライバーを使用していますが、LINQをサポートしています。しかし、これをphpドライバーを使用するように変換しようとすると問題が発生します。

これはLINQクエリです。

.Where(c => DateTime.UtcNow.Subtract(c.DateRequested).TotalDays <= 14).Where(d => ((d.itemid == req.itemid) && (d.MediaType == req.MediaType)) && (d.Status != RequestStatus.Cancelled))

これを正しく行っているかどうかは100%わかりませんが、これはこれまでのところ、読み取り可能な形式での試みです。

Array
(
   [$and] => Array
       (
           [DateRequested] => Array
               (
                   [$gt] => MongoDate Object
                       (
                           [sec] => 1341754027
                           [usec] => 0
                       )

                   [$lte] => MongoDate Object
                       (
                           [sec] => 1342963627
                           [usec] => 0
                       )

               )

           [$and] => Array
               (
                   [$and] => Array
                       (
                           [itemid] => 76510
                           [MediaType] => 0
                       )

                   [Account] => Josh
               )

           [Status] => Array
               (
                   [$ne] => 3
               )

       )

)

そして、これが厄介な形です:

array('$and' => array('DateRequested' => array('$gt' => new MongoDate((time() - 1209600)), '$lte' =>new MongoDate(time())),'$and' => array('$and' => array('itemid' => $itemid,'MediaType' => $source),'Account' => $account),'Status' => array('$ne' => 3)))
4

1 に答える 1

2

上記のコード例から正しいドキュメント構造を推測したかどうかはわかりませんが、次のようmongoなシェルにテストドキュメントが追加されていると仮定します。

// Insert test data
db.mycoll.insert({
    'DateRequested': new Date(),
    'itemid': 76510,
    'MediaType': 0,
    'Account': 'Josh',
    'Status': 2
});

PHPでの検索例は次のようになります。

<?php
    $DAYS14 = 14 * 24 * 60 * 60; // Seconds in 14 days
    $CANCELLED = 3; // Status

    // Dummy search data
    $data['itemid']    = 76510;
    $data['mediatype'] = 0;
    $data['account']   = 'Josh';

    $query = array(
        '$and' => array(
            array('DateRequested' => array('$lt' => new MongoDate(time()))),
            array('DateRequested' => array('$gte' => new MongoDate(time() - $DAYS14))),
        ),
        'itemid'    => $data['itemid'],
        'MediaType' => $data['mediatype'],
        'Account'   => $data['account'],
        'Status'    => array('$ne' => $CANCELLED),
    );

    $document = $collection->findOne($query);

    // Peek at the result
    print_r($document);
?>

クエリ要素は暗黙的に「and」基準を使用していることに注意してください。同じフィールドを繰り返す必要がある場合(たとえば)、フィールドキーが区別されるようDateRequestedに、明示的にする必要があります。$and

于 2012-08-27T13:11:52.570 に答える