Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中通过ObjectId查找mongodb集合项_Php_Mongodb_Mongodb Query - Fatal编程技术网

如何在php中通过ObjectId查找mongodb集合项

如何在php中通过ObjectId查找mongodb集合项,php,mongodb,mongodb-query,Php,Mongodb,Mongodb Query,我有一个mongodb数据库,其中包含两个连接的集合 第一个数据集如下所示: { "_id": ObjectId("5326d2a61db62d7d2f8c13c0"), "reporttype": "visits", "country": "AT", "channel": "wifi", "_level": NumberInt(3) } { "_id": ObjectId("54c905662d0a99627efe17a9"), "avg": NumberInt(0), "chunk_

我有一个mongodb数据库,其中包含两个连接的集合

第一个数据集如下所示:

{
"_id": ObjectId("5326d2a61db62d7d2f8c13c0"),
"reporttype": "visits",
"country": "AT",
"channel": "wifi",
"_level": NumberInt(3)
}   
{
"_id": ObjectId("54c905662d0a99627efe17a9"),
"avg": NumberInt(0),
"chunk_begin": ISODate("2015-01-28T12:00:00.0Z"),
"count": NumberInt(15),
"max": NumberInt(0),
"min": NumberInt(0),
"sum": NumberInt(0),
"tag": ObjectId("5326d2a61db62d7d2f8c13c0")
}   
// select a collection (analog to a relational database's table)
$tagCollection = $db->tags;
$orderCollection = $db->orders;


// formulate AND query
$aTagCriteria = array(
    'reporttype' => new MongoRegex('/[a-z]+/'),
);
// retrieve only _id keys
$fields = array('_id');

$cursor = $tagCollection->find($aTagCriteria, $fields);

$startOfTimeperiod = new MongoDate(strtotime('2015-01-05 00:00:00'));
$endOfTimeperiod = new MongoDate(strtotime('2015-01-07 13:20:00'));

// iterate through the result set
foreach ($cursor as $obj) {
    echo '_id: '.$obj['_id'].' | ';
    // Until here all is ok, I get the _id as output.
    $aOrdercriteria = array(
        'tag'  => new MongoId($obj['_id']),
        'date' => array(
            '$lte' => $endOfTimeperiod,
            '$gte' => $startOfTimeperiod
        ),
    );

    $iCount = $orderCollection->count($aOrdercriteria);
    if ($iCount > 0) {
        echo PHP_EOL.$iCount.' document(s) found.'.PHP_EOL;
        $result = $orderCollection->remove($aOrdercriteria);
        echo __FUNCTION__.'|'.__LINE__.' | '.json_encode($result).PHP_EOL;
        echo 'Removed document with ID: '.$aOrdercriteria['tag'].PHP_EOL;
    }
}
ObjectId连接到第二个集合中的多个数据集,如下所示:

{
"_id": ObjectId("5326d2a61db62d7d2f8c13c0"),
"reporttype": "visits",
"country": "AT",
"channel": "wifi",
"_level": NumberInt(3)
}   
{
"_id": ObjectId("54c905662d0a99627efe17a9"),
"avg": NumberInt(0),
"chunk_begin": ISODate("2015-01-28T12:00:00.0Z"),
"count": NumberInt(15),
"max": NumberInt(0),
"min": NumberInt(0),
"sum": NumberInt(0),
"tag": ObjectId("5326d2a61db62d7d2f8c13c0")
}   
// select a collection (analog to a relational database's table)
$tagCollection = $db->tags;
$orderCollection = $db->orders;


// formulate AND query
$aTagCriteria = array(
    'reporttype' => new MongoRegex('/[a-z]+/'),
);
// retrieve only _id keys
$fields = array('_id');

$cursor = $tagCollection->find($aTagCriteria, $fields);

$startOfTimeperiod = new MongoDate(strtotime('2015-01-05 00:00:00'));
$endOfTimeperiod = new MongoDate(strtotime('2015-01-07 13:20:00'));

// iterate through the result set
foreach ($cursor as $obj) {
    echo '_id: '.$obj['_id'].' | ';
    // Until here all is ok, I get the _id as output.
    $aOrdercriteria = array(
        'tag'  => new MongoId($obj['_id']),
        'date' => array(
            '$lte' => $endOfTimeperiod,
            '$gte' => $startOfTimeperiod
        ),
    );

    $iCount = $orderCollection->count($aOrdercriteria);
    if ($iCount > 0) {
        echo PHP_EOL.$iCount.' document(s) found.'.PHP_EOL;
        $result = $orderCollection->remove($aOrdercriteria);
        echo __FUNCTION__.'|'.__LINE__.' | '.json_encode($result).PHP_EOL;
        echo 'Removed document with ID: '.$aOrdercriteria['tag'].PHP_EOL;
    }
}
如您所见,第一个数据集中的“_id”与第二个数据集中的“tag”相同

我想用php编写一个例程,从第一个集合中获取ID,并在第二个集合中的某个时间段内查找数据集以进行删除

我从第一个集合中获得了id,但我怀疑我在第二个集合的查询中使用了错误的id,因为没有找到或删除任何内容

代码如下所示:

{
"_id": ObjectId("5326d2a61db62d7d2f8c13c0"),
"reporttype": "visits",
"country": "AT",
"channel": "wifi",
"_level": NumberInt(3)
}   
{
"_id": ObjectId("54c905662d0a99627efe17a9"),
"avg": NumberInt(0),
"chunk_begin": ISODate("2015-01-28T12:00:00.0Z"),
"count": NumberInt(15),
"max": NumberInt(0),
"min": NumberInt(0),
"sum": NumberInt(0),
"tag": ObjectId("5326d2a61db62d7d2f8c13c0")
}   
// select a collection (analog to a relational database's table)
$tagCollection = $db->tags;
$orderCollection = $db->orders;


// formulate AND query
$aTagCriteria = array(
    'reporttype' => new MongoRegex('/[a-z]+/'),
);
// retrieve only _id keys
$fields = array('_id');

$cursor = $tagCollection->find($aTagCriteria, $fields);

$startOfTimeperiod = new MongoDate(strtotime('2015-01-05 00:00:00'));
$endOfTimeperiod = new MongoDate(strtotime('2015-01-07 13:20:00'));

// iterate through the result set
foreach ($cursor as $obj) {
    echo '_id: '.$obj['_id'].' | ';
    // Until here all is ok, I get the _id as output.
    $aOrdercriteria = array(
        'tag'  => new MongoId($obj['_id']),
        'date' => array(
            '$lte' => $endOfTimeperiod,
            '$gte' => $startOfTimeperiod
        ),
    );

    $iCount = $orderCollection->count($aOrdercriteria);
    if ($iCount > 0) {
        echo PHP_EOL.$iCount.' document(s) found.'.PHP_EOL;
        $result = $orderCollection->remove($aOrdercriteria);
        echo __FUNCTION__.'|'.__LINE__.' | '.json_encode($result).PHP_EOL;
        echo 'Removed document with ID: '.$aOrdercriteria['tag'].PHP_EOL;
    }
}
搜索条件查找标记对象的正确方法是什么 使用以前找到的id

附言: 我试过了

'tag'  => $obj['_id'],
而不是

'tag'  => new MongoId($obj['_id']),

这也不起作用。

所以有两件事必须改变

第一个就像EmptyArsenal暗示的那样:

tag'  => new MongoId($obj['_id']), 
是错误的,因为$obj[''u id']已经是一个对象

所以

这是正确的。
如果我把我的状态从“日期”改为“开始”yahooo。。。。它起作用了。愚蠢的我。

我不是PHP用户,但我已经确认了_id是字符串?一些驱动程序会自动将其转换为对象id.var_dump($obj);给我:数组(1){[“\u id”]=>object(MongoId){10(1){[“$id”]=>string(24)“537c89d51db62d7d2fd1d37d”}当我解释这个$obj[''u id']应该是一个对象时。看起来这个{u id'已经是一个MongoId了,所以在构建查询时尽量不要将它强制转换为MongoId。所以'tag'=>$obj['u id'],应该是正确的吗?