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)