Php MongoDB在中找到$

Php MongoDB在中找到$,php,mongodb,mongodb-php,Php,Mongodb,Mongodb Php,我正在努力观察现场: [case-file-header] => Array ( [filing-date] => 20130111) 像这样: $cursor = $mongo->$db->$collection->find(array('case-file-header'=> array('filing-d

我正在努力观察现场:

[case-file-header] => Array (
                      [filing-date] => 20130111)
像这样:

$cursor = $mongo->$db->$collection->find(array('case-file-header'=>
                                                     array('filing-date' => 
                                                                 array('$in' => array($current_date)))));
我做错了什么

我的收藏包括700万张唱片。以下是一条记录的示例:

[_id] => MongoId Object (
    [$id] => 50f5a5630c7263b79a373390
)
[serial-number] => 76713205
[registration-number] => 0000000
[transaction-date] => 20130114
[case-file-header] => Array (
   [filing-date] => 20130111
   [status-code] => 630
   [status-date] => 20130114
   [mark-identification] => ALPHACHEMICAL
   [mark-drawing-code] => 3000
   [attorney-docket-number] => 113,328
   [attorney-name] => William Nitkin
   [principal-register-amended-in] => F
   [supplemental-register-amended-in] => F
   [trademark-in] => T
   [collective-trademark-in] => F
   [service-mark-in] => F
   [collective-service-mark-in] => F
   [collective-membership-mark-in] => F
   [certification-mark-in] => F
 )

您应该真正使用位置运算符,因为MongoDB在进行嵌套时实际上会尝试其他操作,如:

array('case-file-header'=>
array('filing-date' => 
因此:

应该有用

这是一个与您展示的文档完全一致的示例:

$mongo = new Mongo();
$db = $mongo->mydb;

$current_date = 20130111;

$db->some_test_collection->insert(array(
    '_id' => new MongoId('50f5a5630c7263b79a373390'),
    'serial-number' => 76713205,
    'registration-number' => 0000000,
    'transaction-date' => 20130114,
    'case-file-header' => Array(
       'filing-date' => 20130111,
       'status-code' => 630,
       'status-date' => 20130114,
       'mark-identification' => 'ALPHACHEMICAL',
       'mark-drawing-code' => 3000,
       'attorney-docket-number' => '113,328',
       'attorney-name' => 'William Nitkin',
       'principal-register-amended-in' => 'F',
       'supplemental-register-amended-in' => 'F',
       'trademark-in' => 'T',
       'collective-trademark-in' => 'F',
       'service-mark-in' => 'F',
       'collective-service-mark-in' => 'F',
       'collective-membership-mark-in' => 'F',
       'certification-mark-in' => 'F'
    )
));
$cursor = $db->some_test_collection->find(array('case-file-header.filing-date' => array('$in' => array($current_date))));
foreach($cursor as $row) var_dump($row);
var_dump($cursor->count());
exit();
其输出为:

int 1

array
  '_id' => 
    object(MongoId)[5]
      public '$id' => string '50f5a5630c7263b79a373390' (length=24)
  'serial-number' => int 76713205
  'registration-number' => int 0
  'transaction-date' => int 20130114
  'case-file-header' => 
    array
      'filing-date' => int 20130111
      'status-code' => int 630
      'status-date' => int 20130114
      'mark-identification' => string 'ALPHACHEMICAL' (length=13)
      'mark-drawing-code' => int 3000
      'attorney-docket-number' => string '113,328' (length=7)
      'attorney-name' => string 'William Nitkin' (length=14)
      'principal-register-amended-in' => string 'F' (length=1)
      'supplemental-register-amended-in' => string 'F' (length=1)
      'trademark-in' => string 'T' (length=1)
      'collective-trademark-in' => string 'F' (length=1)
      'service-mark-in' => string 'F' (length=1)
      'collective-service-mark-in' => string 'F' (length=1)
      'collective-membership-mark-in' => string 'F' (length=1)
      'certification-mark-in' => string 'F' (length=1)

所以一定是哪里出了什么问题

@EugenShevchuk嗯,你在查询多少元素?您可能需要该字段的索引,但不知道。大约一千。现在尝试使用索引。这可能是由于不正确的查询造成的?@EugenShevchuk Nah当光标在返回数据之前超时时,会发生超时result@EugenShevchuk检查我的编辑,我似乎无法使用您展示的示例复制问题,一定是其他原因导致了问题problem@EugenShevchuk我刚才想,,上面显示的转储没有显示我在示例代码中假定为int的字段类型(即string或int),您能否尝试通过string和int查询
$currentdate
,看看是否返回正确的结果?
int 1

array
  '_id' => 
    object(MongoId)[5]
      public '$id' => string '50f5a5630c7263b79a373390' (length=24)
  'serial-number' => int 76713205
  'registration-number' => int 0
  'transaction-date' => int 20130114
  'case-file-header' => 
    array
      'filing-date' => int 20130111
      'status-code' => int 630
      'status-date' => int 20130114
      'mark-identification' => string 'ALPHACHEMICAL' (length=13)
      'mark-drawing-code' => int 3000
      'attorney-docket-number' => string '113,328' (length=7)
      'attorney-name' => string 'William Nitkin' (length=14)
      'principal-register-amended-in' => string 'F' (length=1)
      'supplemental-register-amended-in' => string 'F' (length=1)
      'trademark-in' => string 'T' (length=1)
      'collective-trademark-in' => string 'F' (length=1)
      'service-mark-in' => string 'F' (length=1)
      'collective-service-mark-in' => string 'F' (length=1)
      'collective-membership-mark-in' => string 'F' (length=1)
      'certification-mark-in' => string 'F' (length=1)